由于之前都是使用crontab實(shí)現(xiàn)定時任務(wù),可以指定每一天幾點(diǎn)執(zhí)行任務(wù),
后面發(fā)現(xiàn)workerman很好用,可以自己建多個workerman跑任務(wù),每個任務(wù)做自己的業(yè)務(wù),
有些場景也許是需要一分鐘或者20秒跑一次,但對于數(shù)據(jù)同步需要延遲一天的,
我只需要每天凌晨1點(diǎn)執(zhí)行一次,但不知道workerman支不支持固定時間執(zhí)行任務(wù)的
貌似不支持的,我是這樣做的
Timer::add(60*60, function(){
if (date('H') == 1) {
// 干活...
}
});
復(fù)雜的任務(wù)排程,可以參考一下這個工具 https://github.com/mtdowling/cron-expression
基本上可以跟 crontab 一樣來設(shè)置排程,然后用定時器每分鐘跑一次就可以了。
當(dāng)然如果你的需求沒有那么復(fù)雜,只是固定每天凌晨 1 點(diǎn)執(zhí)行一次的話,樓上的方法是最簡單的了,執(zhí)行效率也可能高一點(diǎn)。
其實(shí)這種可以設(shè)置一個定時器,自動獲取下次執(zhí)行的時間,比如凌晨一點(diǎn)執(zhí)行,啟動服務(wù)計(jì)算下次凌晨一點(diǎn)還需要多少秒,這是一個一次性的定時器,執(zhí)行完之后再次調(diào)用啟動定時器的方法!這樣應(yīng)該就可以了!