Zebra-Crontab基于PHP的定時(shí)任務(wù)管理器
為什么使用PHP管理crontab
一般在定時(shí)任務(wù)較少的情況下,使用原生的crontab服務(wù)一般不會(huì)有什么問題,但當(dāng)定時(shí)任務(wù)較多時(shí)就會(huì)產(chǎn)生如下問題:
-
文本形式的定時(shí)任務(wù)可讀性很差,在沒有任何注釋的情況下,新人很難在不讀源碼的情況下了解定時(shí)任務(wù)的業(yè)務(wù)邏輯
-
在分布式的場景中,定時(shí)任務(wù)會(huì)散落到多臺(tái)機(jī)器上,無法統(tǒng)一管理
-
定時(shí)任務(wù)的日志不能集中化管理,對(duì)定時(shí)任務(wù)的運(yùn)行分析及故障排除比較麻煩
基于以上幾點(diǎn)原因,我們迫切的需要一個(gè)可以集中化管理的、可配置的定時(shí)任務(wù)管理器 但自己開發(fā)一套分布式的定時(shí)任務(wù)系統(tǒng)何其復(fù)雜,所以作者采用crontab服務(wù)做輔助,使用php實(shí)現(xiàn)對(duì)定時(shí)任務(wù)的配置管理
使用php管理定時(shí)任務(wù)有哪些優(yōu)勢
-
定時(shí)任務(wù)可以不再是以文本方式的形式存在,可以存儲(chǔ)在緩沖、數(shù)據(jù)庫中,甚至你可以開發(fā)管理功能,在后臺(tái)對(duì)定時(shí)任務(wù)進(jìn)行編輯
-
定時(shí)任務(wù)的日志是可配置的,你可以按照業(yè)務(wù)需求,對(duì)日志進(jìn)行差異化配置
使用方式如下:
-
編寫一個(gè)任務(wù)管理器,可參考test/simple.php
-
將上述腳本添加到crontab中,一分鐘執(zhí)行一次
示例:
<?php $crontab_config = [ 'test_1' => [ 'name' => '服務(wù)監(jiān)控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();
工具短小,但很精悍
在分布式場景中,你可以把定時(shí)任務(wù)寫入數(shù)據(jù)庫中進(jìn)行統(tǒng)一管理,你可以設(shè)定哪些定時(shí)任務(wù)是由哪些機(jī)器執(zhí)行, 然后通過生成文本文件的方式發(fā)送到所有機(jī)器上,再由這些機(jī)器上的phpCrontab讀取處理;從而實(shí)現(xiàn)分布式場景下的定時(shí)任務(wù)統(tǒng)一管理。
