【问题标题】:Laravel scheduler command never runs a 2nd timeLaravel 调度程序命令从不运行第二次
【发布时间】:2017-01-31 16:42:28
【问题描述】:

我已将调度程序配置为每分钟运行一次以执行两个命令:

$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 日志文件中没有任何内容显示问题。

有什么想法吗?

【问题讨论】:

    标签: laravel laravel-5.2 envoyer.io


    【解决方案1】:

    通过将 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 方法不起作用是个谜。很想知道为什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      相关资源
      最近更新 更多