Laravel 调度程序命令永远不会运行第二次

标签 laravel laravel-5 envoyer.io

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

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

关于Laravel 调度程序命令永远不会运行第二次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39650302/

相关文章:

Laravel 使用assertJson 测试集合JSON 响应

php - Laravel - 类型错误 : Too few arguments?

php - 特使 mkdir 问题

git - 使用 Laravel 的 Envoyer 上传特定的供应商文件

image - Laravel将图像保存到公用文件夹?

php - 未捕获的反射异常 : Class hash does not exist in envoyer deploy

linux - URL 路径在本地有效,但在服务器上无效

php - 在 Laravel 4.2 中重写 Mail MailgunTransport 类

Laravel Voyager 不显示图像

php - 这个 Laravel 路由声明到底意味着什么?