簡體   English   中英

Laravel 5通過AWS EC2上的cron進行計划 - 命令未運行

[英]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 -eapache添加了以下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

資源檢查:


其他信息:

  • 運行Laravel 5.4.16由php artisan --version確定
  • 運行PHP 7.1.3由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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM