【问题标题】:Laravel scheduler running with delay (not on time)Laravel 调度程序延迟运行(不准时)
【发布时间】:2019-03-05 15:16:54
【问题描述】:

Laravel 5.5 PHP 7.1

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

Cron 日志:

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 运行任何工匠命令,此命令直到 16:27:31 才解决(当系统“锁定”时)

我没有更多的想法...查看了日志和所有内容,但没有任何线索。我认为不是 Laravel,可能是服务器问题。服务器负载真的很小,是一个拥有 15 个用户的私有应用程序的小滴。 Mysql查询不慢(我已经激活了慢查询日志)

Cron 日志:

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

【问题讨论】:

    标签: php laravel cron scheduled-tasks


    【解决方案1】:

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

    要解决这个问题,使用 haveged 守护程序生成熵:

    1. 启用 EPEL 存储库:

      yum install epel-release

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

      yum install haveged chkconfig haveged on systemctl start haveged

    【讨论】:

      【解决方案2】:

      也许你需要写通话记录,而不是 ping 收到的记录。 也许您收到延迟的 ping,而不是呼叫时间表。

      【讨论】:

      • 我已经删除了 ping 并使用了日志,但显示的结果相同 :( 就像系统在几分钟内“挂机”并且无法执行工匠命令。
      猜你喜欢
      • 1970-01-01
      • 2019-06-11
      • 2013-05-29
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 2018-04-16
      相关资源
      最近更新 更多