Laravel调度程序延迟运行(不准时)

时间:2018-09-30 06:56:20

标签: php laravel cron scheduled-tasks

Laravel 5.5 PHP 7.1

我在生产服务器上遇到一个奇怪的问题,该问题延迟了调度程序,因此无法按时触发任务。似乎由于某种原因,命令artisan schedule:run有时会花费一些时间来加载。如果我从控制台运行artisan schedule:run,它将立即运行,问题是cron作业何时触发。我已将cron设置为5分钟而不是所有时间触发,以便更清晰地查看。

定时日志:

Sep 29 10:05:01 localhost CROND[17311]
Sep 29 10:10:01 localhost CROND[17846]
Sep 29 10:15:01 localhost CROND[18165]

计划程序日志:

Received ping at Saturday, 29-Sep-2018 10:06:11 EDT 
Received ping at Saturday, 29-Sep-2018 10:10:01 EDT 
Received ping at Saturday, 29-Sep-2018 10:18:55 EDT

调度程序唯一的任务是简单的闭包来测量时间,没有复杂的任务。

$schedule->call(function () {
        return true;
    })
    ->everyMinute()
    ->pingBefore('...')

有人告诉我这可能是服务器负载问题或时钟同步,在运行uptime; sar -q; etc后结果为10:52:05 up 4:29, 1 user, load average: 0,02, 0,04, 0,05,并且时钟处于同步状态。

真正的问题是,如果我有一个任务要在10:05运行,则它永远不会运行,因为计划程序是在10:06加载的。

有什么想法吗?

更新结果:----------------

我发现,如果我在“挂断”期间执行任何工匠命令,则将花费很多时间。可以说您在16:24运行任何artisan命令,直到16:27:31(系统被“锁定”时),该命令才会被解析

我没有更多的想法了……看过日志以及所有内容,但没有线索。我认为不是Laravel,也许是服务器问题。服务器负载确实很小,对于拥有15个用户的私有应用程序而言,这是一笔小小的支出。 MySQL查询并不慢(我已经激活了慢查询日志)

定时日志:

Sep 30 16:20:01 localhost CROND[28616]
Sep 30 16:21:01 localhost CROND[854]
Sep 30 16:22:02 localhost CROND[988]
Sep 30 16:23:01 localhost CROND[1062]
Sep 30 16:24:01 localhost CROND[1132]
Sep 30 16:25:01 localhost CROND[1199]
Sep 30 16:26:01 localhost CROND[1255]
Sep 30 16:27:01 localhost CROND[1315]
Sep 30 16:28:01 localhost CROND[1411]
Sep 30 16:29:01 localhost CROND[1508]
Sep 30 16:30:01 localhost CROND[1599]
Sep 30 16:31:01 localhost CROND[1670]
Sep 30 16:32:01 localhost CROND[1742]
Sep 30 16:33:01 localhost CROND[1807]
Sep 30 16:34:01 localhost CROND[1874]
Sep 30 16:35:01 localhost CROND[1936]
Sep 30 16:36:01 localhost CROND[1995]
Sep 30 16:37:01 localhost CROND[2062]

计划程序日志:

[2018-09-30 16:20:12] production.INFO: schedule call  
[2018-09-30 16:21:01] production.INFO: schedule call  
[2018-09-30 16:22:02] production.INFO: schedule call  
[2018-09-30 16:23:01] production.INFO: schedule call  
[2018-09-30 16:27:31] production.INFO: schedule call  
[2018-09-30 16:27:31] production.INFO: schedule call  
[2018-09-30 16:27:31] production.INFO: schedule call  
[2018-09-30 16:27:31] production.INFO: schedule call  
[2018-09-30 16:28:01] production.INFO: schedule call  
[2018-09-30 16:29:01] production.INFO: schedule call
[2018-09-30 16:30:01] production.INFO: schedule call
[2018-09-30 16:31:01] production.INFO: schedule call
[2018-09-30 16:32:02] production.INFO: schedule call
[2018-09-30 16:33:01] production.INFO: schedule call
[2018-09-30 16:37:53] production.INFO: schedule call
[2018-09-30 16:37:53] production.INFO: schedule call
[2018-09-30 16:37:53] production.INFO: schedule call
[2018-09-30 16:37:53] production.INFO: schedule call

2 个答案:

答案 0 :(得分:0)

也许您需要写呼叫日志,但是不可以ping收到的日志。 也许您延迟收到ping通知,而不是通话安排。

答案 1 :(得分:0)

此问题是由PHP脚本的熵耗尽引起的。

要解决此问题,请使用Haveged守护程序生成熵:

  1. 启用EPEL存储库:

    yum install epel-release

  2. 使用以下命令安装守护程序并启用它:

    yum install haveged chkconfig haveged on systemctl start haveged