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

ThinkPHP 專案中執行定時任務(Crond)實戰

     編輯:PHP 相關知識

ThinkPHP 專案中執行定時任務(Crond)實戰

ThinkPHP 支援 CLI 模式,讓我們能將常駐腳本、定時任務以命令列方式執行,避免 Web 請求超時限制。本文說明如何啟用 CLI、建立獨立入口、編寫排程腳本與常見問題排查。

一、啟用 CLI 模式

在入口檔案(如 index.php)頂部定義常數:

define('MODE_NAME', 'cli'); // 部分版本為 THINK_MODE

建議另建 index_cli.php 作為 CLI 專用入口,避免影響正常 Web 訪問。

二、編寫定時任務腳本

在 Lib/Action/CrondAction.class.php 新增 test 方法:

class CrondAction extends Action {
    public function test() {
        // 具體業務邏輯,如資料同步、報表生成等
        echo "Crond test executed at " . date('Y-m-d H:i:s') . "\n";
    }
}

三、系統排程(Crontab)範例

# 每分鐘執行一次測試
* * * * * /usr/bin/php /home/nginx/html/pet/index_cli.php Crond/test

四、常見問題與解決方案

資料新增總是返回 error
檢查主鍵是否設為自動遞增;若手動指定 ID 且重複會導致寫入失敗。建議輸出 getLastSql() 直接在資料庫執行除錯。
想讓類別所有方法執行前先跑驗證
可建立基底類別實作驗證邏輯,再讓目標類別繼承;或使用 ThinkPHP 內建 RBAC 權限控制機制,官方範例位於 Example/RBAC 目錄。

五、最佳實踐建議

  • CLI 入口與 Web 入口分離,配置檔案獨立載入。
  • 長時間任務加入鎖機制(如 flock)防止並發執行。
  • 輸出日誌至檔案,便於事後追蹤。
  • 定時任務失敗需有告警機制(郵件/簡訊/Slack)。

善用 CLI 模式與系統排程,能讓 ThinkPHP 專案輕鬆處理後台批次作業。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved