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