首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 簡易定時任務實現:基於 ignore_user_abort 與 sleep 的長連接方案

     編輯:PHP 相關知識

適用場景

在無法使用系統級定時任務(如 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 線程

生產環境建議

  1. 增加異常捕獲與日誌記錄,防止單次錯誤導致腳本退出。
  2. 使用 register_shutdown_function 實現平滑重啟機制。
  3. 考慮使用 Supervisor 等進程管理工具守護腳本進程。
  4. 高併發、高可靠性場景請務必使用系統級 Crontab + CLI 模式或專用任務隊列(如 Gearman、Redis Queue、Laravel Horizon)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved