[英]Laravel 8 schedule via cron on AWS EC2 linux - commands not running
[英]Laravel 5 schedule via cron on AWS EC2 - commands not running
问题:
我有一个Laravel 5.4工匠任务,我需要通过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 -e
为apache
添加了以下cron命令:
* * * * * php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1
为了确保它不是权限问题,我还为以下用户添加了相同的命令:
ec2-user
通过crontab -e
root
via 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
确定 php -v
确定 问题与php
在cron命令定义中缺少(绝对)路径有关
cron命令应该是:
* * * * * /usr/local/bin/php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1
你可以从终端的which php
输出中获取正确的php路径
笔记:
- 通过以下方式添加cron命令,Laravel Scheduler命令可以从apache
用户正常工作:
sudo crontab -u apache -e
- Laravel仍未记录Log::info('schedule:run');
就像它应该的每一分钟......即使从root
运行cron命令(即通过sudo crontab -e
设置cron)
这可能与Laravel中的其他一些设置有关 - 因为即使通过php artisan schedule:run
手动运行Scheduler也不记录任何内容php artisan schedule:run
从项目root php artisan schedule:run
通常,经验法则是检查日志文件的写入权限,以确保apache
用户可以写入。
如果所有其他方法都失败了,您可以在crontab中明确指向您的日志文件:
* * * * * /usr/local/bin/php /var/www/html/myproject/artisan schedule:run >> /var/www/html/myproject/storage/logs/laravel.log 2>&1
如果您的作业需要访问资源(如DB),那么您可能需要在调用artisan之前获取环境变量定义文件。 像这样的东西:
* * * * * source /path/to/envvars; /usr/local/bin/php /var/www/html/myproject/artisan schedule:run >> /var/www/html/myproject/storage/logs/laravel.log 2>&1
祝好运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.