【问题标题】:Crontab isn't running Laravel scheduled jobsCrontab 没有运行 Laravel 计划的作业
【发布时间】:2018-07-05 18:38:21
【问题描述】:

我已经在我的 AWS-EC2 实例上设置了 crontab,以使用 sudo crontab-e 每分钟通过根帐户访问 Laravel 调度端点:

* * * * * php ~/htdocs/artisan schedule:run >> /dev/null 2>&1

然而,尽管 cron 日志显示它确实每分钟都在运行:

Jan 26 12:02:01 ip-172-31-28-116 CRON[5057]: (root) CMD (php ~/htdocs/artisan schedule:run >> /dev/null 2>&1)

作业本身没有执行。

直接运行命令php ~/htdocs/artisan schedule:run >> /dev/null 2>&1 会触发作业并正常工作。

我真的在为这里出了什么问题而苦苦挣扎,我错过了什么吗?

【问题讨论】:

  • 听起来像是从另一个用户运行到 cron (root) 的工作,在这种情况下,~/ 可能不是您想的那样?而且由于您正在重定向输出,因此您可能看不到任何消息。
  • 您希望~ 扩展到什么?请尝试使用绝对路径。
  • 公平点 - 我分别通过sudo crontabcrontab通过root和用户(bitnami)运行:将root cron作业更改为绝对路径,但仍然没有触发Laravel 调度程序。 Jan 26 12:19:01 ip-172-31-28-116 CRON[5245]: (root) CMD (php /home/bitnami/htdocs/artisan schedule:run >> /dev/null 2>&1) Jan 26 12:19:01 ip-172-31-28-116 CRON[5246]: (bitnami) CMD (php ~/htdocs/artisan schedule:run)

标签: php laravel amazon-ec2 cron


【解决方案1】:

添加 cron 条目时使用绝对路径。 ~/htdocs/artisan 应使用应用程序根目录的完整路径进行设置。

当您手动运行命令时它会起作用,因为您的环境已相应设置。使用 sudo 添加 cron 条目时并非如此。

【讨论】:

  • 不要被一个反对票触发。有些人就是不明白。你是对的,当然。
  • 我没有投反对票,但我想这是因为您发布的答案已经在 cmets 中被建议和尝试过。这通常是不受欢迎的。
【解决方案2】:

所以,我没有注意 cron 输出“未安装 MTA,丢弃输出” - 在安装 MTA(后缀,通过 sudo apt-get install postfix)时,结果发现对于 cronjob,php 找不到。

将使用which php 的输出的命令更改为:

/opt/bitnami/php/bin/php /home/bitnami/htdocs/artisan schedule:run

现在可以工作了。

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2018-06-14
    • 2016-03-06
    • 1970-01-01
    • 2020-10-09
    • 2020-06-26
    • 1970-01-01
    • 2010-09-12
    • 2015-08-03
    相关资源
    最近更新 更多