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
答案 0 :(得分:0)
也许您需要写呼叫日志,但是不可以ping收到的日志。 也许您延迟收到ping通知,而不是通话安排。
答案 1 :(得分:0)
此问题是由PHP脚本的熵耗尽引起的。
要解决此问题,请使用Haveged守护程序生成熵:
启用EPEL存储库:
yum install epel-release
使用以下命令安装守护程序并启用它:
yum install haveged
chkconfig haveged on
systemctl start haveged