簡體   English   中英

Laravel 調度程序命令永遠不會第二次運行

[英]Laravel scheduler command never runs a 2nd time

我已將調度程序配置為每分鍾運行一次以執行兩個命令:

$schedule->command('amazon:read-sqs')
    ->everyMinute()
    ->runInBackground()
    ->withoutOverlapping()
    ->sendOutputTo(storage_path('logs/cmd/amazon_read_sqs.log'), true)
    ->thenPing('http://beats.envoyer.io/heartbeat/SoMeRaNdOmHaSh1');

$schedule->command('jobs:dispatcher', ['--max' => 100])
    ->everyMinute()
    ->runInBackground()
    ->withoutOverlapping()
    ->sendOutputTo(storage_path('logs/cmd/jobs_dispatcher.log'), true)
    ->thenPing('http://beats.envoyer.io/heartbeat/SoMeRaNdOmHaSh2');

在過去一個月的開發中,它運行良好。 然而,就在我們將服務器設置為與 Envoyer 一起運行之后,調度程序在第一次之后突然就不再執行了。

換句話說,如果在 Forge 中將計划設置為每分鍾,它會運行一次,然后從不附加日志。

我添加了 Envoyer 心跳來每 10 分鍾跟蹤一次,但它不會觸發thenPing()方法來通知 Envoyer……即使在第一次運行之后。

我可以刪除 cron 條目並重新創建它,強制它運行一次。

如果給它們自己的 cronjob,所有這些都運行良好。

當我檢查任何/storage/framework/schedule-*鎖定文件時,我發現沒有任何可以阻止它們刪除的內容。

Laravel 日志文件中沒有任何顯示問題。

有任何想法嗎?

通過將 cronjob 從php /home/forge/default/artisan schedule:run更改為php /home/forge/default/current/artisan schedule:run

這允許 Laravel 調度程序正確運行。 然而, thenPingpingBefore方法仍然沒有真正完成它們的工作。

為了解決這個問題,我必須在每個命令之后手動添加這一行:

 (new Client())->get('http://beats.envoyer.io/heartbeat/SoMeRaNdOmHaSh');

為什么內置的 ping 方法不起作用是個謎。 很想知道為什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM