Laravel调度程序命令从不运行第二次

时间:2016-09-22 23:23:01

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

通过将cronjob从php /home/forge/default/current/artisan schedule:run更改为thenPing

来解决此问题

这使Laravel调度程序能够正确运行。但是,方法pingBefore (new Client())->get('http://beats.envoyer.io/heartbeat/SoMeRaNdOmHaSh'); 实际上仍然无法正常工作。

要解决这个问题,我必须在每个命令后手动添加此行:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>


    <title></title>
</head>
<body>
    <div>
        <button id="myBtn">Button</button>
    </div>

    <div id="demo">

    </div>

    <script>
    document.getElementById("myBtn").addEventListener("click", function () {
        document.getElementById("demo").innerHTML = "Hello World";
    });
    </script>

</body>
</html>

为什么内置ping方法不起作用是一个谜。很想知道原因。