php - 通过 AWS EC2 上的 cron 安排 Laravel 5 - 命令未运行

标签 php laravel laravel-5 cron laravel-scheduler

问题:
我有一个 Laravel 5.4 artisan 任务,我需要通过 cron 运行 - 但尽管命令和调度程序(显然)设置正确,但它没有完成。

这是 Laravel、php、apache、linux 还是 crontab 问题?最好的诊断方法是什么?


背景
在默认(亚马逊 AMI)EC2 实例上,artisan 命令被正确定义并在通过以下方式调用时从项目目录(/var/www/html/myproject/)完美运行:

php artisan mycommand:option1

我已将其添加到 app/Console/Kernel.php 中,如下所示:

protected function schedule(Schedule $schedule)
{
    Log::info('schedule:run');
    $schedule   ->command('mycommand:option1')
                        ->dailyAt('07:00')
                        ->emailOutputTo('email@email.com');

    $schedule   ->command('mycommand:option2')
                        ->dailyAt('07:15')
                        ->emailOutputTo('email@email.com');
}

通过 sudo crontab -u apache -eapache 添加了以下 cron 命令:

* * * * * php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1

为确保这不是权限问题,我还为以下用户添加了相同的命令:

  • ec2-user 通过 crontab -e
  • root 通过 sudo crontab -e

系统输出

来自 sudo tail -f/var/log/cron :

Apr 11 19:17:01 ip-10-0-0-42 CROND[17968]: (root) CMD (php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1)
Apr 11 19:17:01 ip-10-0-0-42 CROND[17969]: (ec2-user) CMD (php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1)
Apr 11 19:17:01 ip-10-0-0-42 CROND[17970]: (apache) CMD (php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1)
Apr 11 19:18:01 ip-10-0-0-42 CROND[17980]: (ec2-user) CMD (php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1)
Apr 11 19:18:01 ip-10-0-0-42 CROND[17981]: (apache) CMD (php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1)
Apr 11 19:18:01 ip-10-0-0-42 CROND[17982]: (root) CMD (php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1)
Apr 11 19:19:01 ip-10-0-0-42 CROND[17992]: (root) CMD (php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1)
Apr 11 19:19:01 ip-10-0-0-42 CROND[17993]: (ec2-user) CMD (php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1)
Apr 11 19:19:01 ip-10-0-0-42 CROND[17994]: (apache) CMD (php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1)

没有出现在任何一个:
sudo tail -f/var/www/html/myproject/storage/log/laravel.log
或者
sudo tail -f/var/www/html/myproject/storage/log/laravel-2017-04-11.log


附加信息

内核权限:

drwxr-sr-x 2 apache apache 4096 Feb 24 00:24 Commands
-rw-r--r-- 1 apache apache 1111 Feb 24 00:24 Kernel.php

检查的资源:


其他信息:

  • 运行由 php artisan --version 确定的 Laravel 5.4.16
  • 运行由 php -v 确定的 PHP 7.1.3

最佳答案

问题与 php 在 cron 命令定义中缺少它的(绝对)路径有关

cron 命令应该是:

* * * * * /usr/local/bin/php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1

你可以从终端which php的输出中得到正确的php路径

注意事项:
- Laravel Scheduler 命令可以在 apache 用户中正常工作,方法是通过以下方式添加 cron 命令:

sudo crontab -u apache -e  

- Laravel 仍然没有像它应该的那样每分钟记录 Log::info('schedule:run'); ......即使从 root 运行 cron 命令(即通过 sudo crontab -e 设置 cron)
这可能与 Laravel 中的一些其他设置有关 - 因为即使通过 php artisan schedule:run 从项目根目录手动运行调度程序,它也不会记录任何内容

关于php - 通过 AWS EC2 上的 cron 安排 Laravel 5 - 命令未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43357222/

相关文章:

php - 捕获从 Postgresql 到 PHP 的错误

javascript - 我不想看到网址中的所有内容

laravel-5 - 指定不同的公共(public)路径

mysql - Laravel 5.2 如何更新我的用户表

php - 这是在 PHP mvc 中缓存查询和构建页面的可接受方式吗?

java - 使用 volley 库获取具有整数的 json

laravel - Laravel 中 POST 方法的路由回退?

laravel - 如何在 Laravel 中使用护照检索访问 token ?

php - 部署 Web 应用程序 Amazon AWS

laravel - 在 Controller 中使用 foreach 时出现语法错误