1.
config/app.php
return [
'debug' => true,
'default_timezone' => 'Asia/Shanghai',
];
2.
process/test.php
(每天早上10點(diǎn) 和 11點(diǎn),這樣是可以準(zhǔn)時(shí)執(zhí)行的,查看對(duì)應(yīng)的日志,有內(nèi)容輸出)
public function onWorkerStart(Worker $worker)
{
$workerId = $worker->id;
new Crontab('0 0 10,11 * * *', function () use ($workerId) {
echo date('Y-m-d H:i:s') . PHP_EOL;
});
}
3.
但如果把定時(shí)任務(wù)換成如下(每天凌晨1點(diǎn) 和 每天凌晨4點(diǎn))
定時(shí)任務(wù)就不會(huì)執(zhí)行
public function onWorkerStart(Worker $worker)
{
$workerId = $worker->id;
new Crontab('0 0 1,4 * * *', function () use ($workerId) {
echo date('Y-m-d H:i:s') . PHP_EOL;
});
}
4.
0 0 1,4 * * *
,啟動(dòng)服務(wù),今天早上發(fā)現(xiàn)沒(méi)有對(duì)應(yīng)的日志輸出0 0 10,11 * * *
,然后 restart
服務(wù) 0 10,11 * * *
這是10點(diǎn)11點(diǎn)
0 1,4 * * *
這是 1點(diǎn)4點(diǎn)
下班之前,定時(shí)任務(wù),設(shè)置為 0 0 1,4 * * *
,啟動(dòng)服務(wù),早上來(lái)公司,發(fā)現(xiàn)沒(méi)有日志輸出
然后,再調(diào)整為0 10,11 * * *
,早上10點(diǎn) 和 早上11點(diǎn),有日志輸出
這就有問(wèn)題了啊
為啥凌晨的任務(wù)沒(méi)有執(zhí)行呢
請(qǐng)問(wèn)大佬
為什么設(shè)置為 new Crontab('0 1,4 * * *'
,在凌晨1點(diǎn) 和 凌晨4點(diǎn),依然沒(méi)有執(zhí)行呢?
定時(shí)任務(wù)的執(zhí)行規(guī)則,在分鐘級(jí)的定義時(shí),與 Linux 的 crontab 命令的規(guī)則一致,在秒級(jí)的定義時(shí),規(guī)則長(zhǎng)度從 5 位變成 6 位,在規(guī)則的前面增加了對(duì)應(yīng)秒級(jí)的節(jié)點(diǎn),也就是 5 位時(shí)以分鐘級(jí)規(guī)則執(zhí)行,6 位時(shí)以秒級(jí)規(guī)則執(zhí)行,如 /5 則代表每 5 秒執(zhí)行一次。注意在注解定義時(shí),規(guī)則存在 \ 符號(hào)時(shí),需要進(jìn)行轉(zhuǎn)義處理,即填寫 \/5
為什么設(shè)置為 new Crontab('0 1,4 * * *'
,在凌晨1點(diǎn) 和 凌晨4點(diǎn),依然沒(méi)有執(zhí)行呢?
先學(xué)習(xí)一下crontab表達(dá)式:https://www.runoob.com/linux/linux-comm-crontab.html
寫入日志的,是這樣的
Db::table(CustomerModel::$table)
->where(CustomersEntity::TBC_star_balance, '>', 0)
->select([CustomersEntity::TBC_id, CustomersEntity::TBC_level_id])
->chunkById(10000, function ($customers) {
/**
* 通過(guò)隊(duì)列處理,啟動(dòng)多個(gè)消費(fèi)者,提高處理速度
*/
Client::send((new CheckCustomerLevelConsumer())->queue, json_encode(['customers' => $customers]));
});
因?yàn)闆](méi)有符合條件的結(jié)果,所以永遠(yuǎn)不會(huì)走到回調(diào)函數(shù)內(nèi),所以不會(huì)發(fā)送數(shù)據(jù)到隊(duì)列里
我在隊(duì)列里,把接收到的數(shù)據(jù),寫入日志
你最好是移除掉你的業(yè)務(wù)邏輯,直接使用系統(tǒng)自帶日志系統(tǒng)Log(Log::info('xxxxxxxxxxxx')),嘗試記錄日志。先排查是不是定時(shí)任務(wù)插件的問(wèn)題。繼而排查業(yè)務(wù)問(wèn)題。(初步判斷是你業(yè)務(wù)和隊(duì)列有問(wèn)題)