【问题标题】:Cron jobs on shared hosting using laravel scheduler not working使用 laravel 调度程序在共享主机上的 Cron 作业不起作用
【发布时间】:2019-05-08 17:48:51
【问题描述】:

我在运行 laravel 调度程序以在队列中发送邮件时遇到问题

设置如下:Laravel 5.7 我已经配置了调度程序(App/Console/Kernel.php),如下所述

protected function schedule(Schedule $schedule)
{       
  $schedule->command('queue:work --tries=3')->everyFiveMinutes()->withoutOverlapping();
}

数据库是按照 laravel 文档设置的。在我的 UI 中单击链接后,我就可以在 db 中看到该条目。

.env QUEUE_CONNECTION=database 与 Config/queue.php 中的设置相同 (如果我将数据库更改为同步,它会完美运行)

我在服务器中的 cron 工作如下(我只是尝试记录 cron)

/usr/local/bin/php /home/XXX/YYY/artisan schedule:run 1>> /home/XXX/public_html/junk/cron_log.php 2>&1

我可以看到 cron 日志每五分钟更新一次,但是

“没有准备好运行的预定命令”

昨晚使用完全相同的代码和设置(睡前)。我已经测试了超过 40 次电子邮件发送尝试和数据库条目被删除。我只尝试使用everyFiveMinues() 保存调度程序,但现在无法正常工作。

我可以理解邮件到达缓慢但为什么数据库条目没有像昨晚那样被删除?

【问题讨论】:

  • 我不认为你需要一个计划任务和一个队列监听器,你可以只使用一个或另一个。您在设置计划任务之前说它正在工作,那么为什么不单独使用队列呢?

标签: php laravel cron hosting shared


【解决方案1】:

这可能对其他使用 Laravel 5.7、共享主机 Godaddy 的人有用。

上述发送电子邮件作业的问题未执行(我的意思是 cron 作业正在运行,但未清除数据库条目。问题似乎与

->withoutOverlapping();

删除此方法后,我现在可以正确查看 cron_log 条目,并且我也收到了邮件。我的 cron_log 条目如下所示

Running scheduled command: '/opt/alt/php71/usr/bin/php' 'artisan' queue:work --tries=3 > '/dev/null' 2>&1

我猜没有Overlapping() 的方法在cron 执行中有问题。我没有更改代码中的任何内容。

【讨论】:

    猜你喜欢
    • 2020-03-04
    • 2012-01-10
    • 2015-04-19
    • 1970-01-01
    • 2016-12-07
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多