php_crond:一個基於多程序的定時任務系統-支援秒粒度的任務配置
阿新 • • 發佈:2018-12-26
php_crond
基於多程序的定時工作管理員,支援秒級別的定時任務
特性
- 通過配置檔案管理所有定時任務
- 支援秒級的定時任務粒度
- 使用symfony/process進行程序管理
- 使用React/event-loop執行事件迴圈
- 提供http服務,遠端檢視和操作php_crond(參見:API文件)
執行
啟動crond
php bin/crond.php
在後臺啟動crond
nohup php bin/crond.php > /dev/null 2>&1 &
傳送USR1訊號,安全關閉crond 主程序會等待所有的子程序任務結束,才會正式退出
kill -USR1 `cat logs/crond.pid`
傳送USR2訊號,重新讀取task配置檔案
kill -USR2 `cat logs/crond.pid`
基本配置
服務配置檔案config/base.php
return [ //模式 'model' => 'daemon', //PHP程式路徑 'php' => '/usr/local/php-5.6.30/bin/php', //日誌檔案 'log_file' => PROJECT_ROOT . "/logs/crond.log", //主程序pid檔案 'pid_file' => PROJECT_ROOT . "/logs/crond.pid", //http介面服務,提供介面遠端操作php_crond 'http_server' => [ 'switch' => false,//是否啟動http服務 'listen' => '127.0.0.1', 'port' => 8080,//監聽埠 ], ];
任務配置
任務配置檔案config/task.php
/** * task配置檔案 * 例子: * 'process_a' => [ * 'daemon' => '* * * * * *',//秒 分 時 日 月 周 * 'filename' => '/usr/local/php/bin/php', //執行程式 * 'params' => [],//執行程式引數 * 'single' => true,//如果程序在執行,則不執行,只保持一個程序 * 'standard_ouput' => '', //標準輸出 * 'error_output' => '', // 錯誤輸出 * ] */ return [ 'process_a' => [ 'daemon' => '*/3 * * * * *', 'filename' => '/usr/local/php-5.6.30/bin/php', 'params' => ['/www/tests/pcntl/examples/a.php'], 'single' => true, 'standard_ouput' => '/www/tests/pcntl/examples/a.log', 'error_output' => '/www/tests/pcntl/examples/a.log', ] ];
如果你需要配置非常多的任務,可以使用Crond\Task\Directory::registerTaskDirectory,該方法會遍歷註冊目錄下的所有.php檔案,並返回其中的任務列表
return Crond\Task\Directory::registerTaskDirectory(__DIR__ . "/tasks");
允許配置外部介面,用於返回任務列表。引數url=介面地址,serverId=作為服務標識
PS:你可能需要額外搭建後臺用於任務管理
return \Crond\Task\Remote::registerTask($url, $serverId);
介面返回例子
{ "process_a": { "daemon": "0 * * * * *", "filename": "echo", "params": ["hello world!"], "single": true, "standard_ouput": "/dev/null", "error_output": "/dev/null" } }