gor*_*rds 5 php cron laravel laravel-5 laravel-scheduler
问题:
我有一个 Laravel 5.4 artisan 任务,我需要通过 cron 运行它 - 尽管命令和调度程序(显然)设置正确,但它并没有完成。
这是 Laravel、php、apache、linux 或 crontab 的问题吗?最好的诊断方法是什么?
背景
在默认(亚马逊 AMI)EC2 实例上,artisan 命令被正确定义,并/var/www/html/myproject/在通过以下方式调用时从项目目录(即)完美运行:
php artisan mycommand:option1
Run Code Online (Sandbox Code Playgroud)
我已将此添加到如下所示的时间表中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');
}
Run Code Online (Sandbox Code Playgroud)
为apachevia添加了以下 cron 命令sudo crontab -u apache -e:
* * * * * php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
为了确保这不是权限问题,我还为以下用户添加了相同的命令:
ec2-user 通过 crontab -eroot 通过 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)
Run Code Online (Sandbox Code Playgroud)
没有出现在以下任何一个中:
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
Run Code Online (Sandbox Code Playgroud)
检查的资源:
其他信息:
php artisan --versionphp -v该问题与phpcron 命令定义中缺少其(绝对)路径有关
cron 命令应该是:
* * * * * /usr/local/bin/php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
您可以从which phpin 终端的输出中获得正确的 php 路径
注意:
- Laravel Scheduler 命令apache通过添加 cron 命令从用户那里正常工作:
sudo crontab -u apache -e
Run Code Online (Sandbox Code Playgroud)
- Laravel 仍然没有Log::info('schedule:run');像它应该的那样记录每一分钟......即使从root(即设置 cron via sudo crontab -e)运行 cron 命令
这可能与 Laravel 中的其他一些设置有关 - 因为即使调度程序手动运行它也不会记录任何内容通过php artisan schedule:run从项目根
| 归档时间: |
|
| 查看次数: |
4293 次 |
| 最近记录: |