在無法使用系統級定時任務(如 Linux Crontab、Windows 任務計劃)的環境下,可通過 PHP 腳本常駐內存實現簡易的定時執行邏輯。適合輕量級、低頻率的後台任務。
ignore_user_abort(true):忽略用戶斷開連接,腳本繼續在後台運行。set_time_limit(0):移除腳本最大執行時間限制。sleep($interval):讓進程休眠指定秒數,控制執行頻率。do { ... } while(true); 持續運行。<?php
ignore_user_abort(true); // 關鍵:客戶端關閉也不停止
set_time_limit(0); // 關鍵:無限執行時間
$interval = 60 * 5; // 每 5 分鐘執行一次
do {
$url = "https://www.example.com/task"; // 目標任務 URL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 2); // 超時 2 秒
$result = curl_exec($ch);
curl_close($ch);
// 可在此處理 $result 或寫入日誌
// file_put_contents('task.log', date('Y-m-d H:i:s')." executed\n", FILE_APPEND);
sleep($interval); // 休眠,釋放 CPU
} while (true);
?>
| 優點 | 缺點 |
|---|---|
| 無需系統權限,純 PHP 實現 | 長時間運行可能導致內存洩漏(需定期重啟) |
| 部署簡單,單文件即可運行 | 無法精確控制執行時間點(受 sleep 漂移影響) |
| 適合共享主機等受限環境 | 佔用一個 PHP-FPM 進程/Apache 線程 |
register_shutdown_function 實現平滑重啟機制。