基于PHP的定時任務管理器:Zebra-Crontab
為什么使用PHP管理crontab
一般在定時任務較少的情況下,使用原生的crontab服務一般不會有什么問題,但當定時任務較多時就會產生如下問題:
-
文本形式的定時任務可讀性很差,在沒有任何注釋的情況下,新人很難在不讀源碼的情況下了解定時任務的業務邏輯
-
在分布式的場景中,定時任務會散落到多臺機器上,無法統一管理
-
定時任務的日志不能集中化管理,對定時任務的運行分析及故障排除比較麻煩
基于以上幾點原因,我們迫切的需要一個可以集中化管理的、可配置的定時任務管理器 但自己開發一套分布式的定時任務系統何其復雜,所以作者采用crontab服務做輔助,使用php實現對定時任務的配置管理
使用php管理定時任務有哪些優勢
-
定時任務可以不再是以文本方式的形式存在,可以存儲在緩沖、數據庫中,甚至你可以開發管理功能,在后臺對定時任務進行編輯
-
定時任務的日志是可配置的,你可以按照業務需求,對日志進行差異化配置
使用方式如下:
-
編寫一個任務管理器,可參考test/simple.php
-
將上述腳本添加到crontab中,一分鐘執行一次
示例:
<?php $crontab_config = [ 'test_1' => [ 'name' => '服務監控1', 'cmd' => 'php -v', 'output' => '/tmp/test.log', 'time' => '* * * * *' ], 'single_test' => [ 'name' => 'php -i', 'cmd' => 'php -i', 'output' => '/tmp/single_script.log', 'time' => [ '* * * * *', '* * * * *', ], ], ]; $crontab_server = new \Jenner\Zebra\Crontab\Crontab($crontab_config); $crontab_server->start();
工具短小,但很精悍
在分布式場景中,你可以把定時任務寫入數據庫中進行統一管理,你可以設定哪些定時任務是由哪些機器執行, 然后通過生成文本文件的方式發送到所有機器上,再由這些機器上的phpCrontab讀取處理;從而實現分布式場景下的定時任務統一管理。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!