Laravel 中執行定時任務是經過 cron 來實現,官網文檔中就是簡單一句 + 一行Cron 代碼php
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
可是在實際使用的過程當中,若是對 Linux 和 Cron 不熟悉,會遇到一些小坑,咱們整理並記錄了分享出來但願能幫助到你們。mysql
當Cron
沒法生效時,多是Cron
執行環境變量不正確引發的。sql
env > /tmp/env.output
打開/tmp/env.output
文件,將PATH
字段整行添加至corntab
文件頂部,corntab
文件在/var/spool/cron
目錄下php7
crontab
文件示例PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/mysql/bin:/opt/php7/bin:/opt/memcached/bin:/root/bin * * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
經過 crontab -e
命令建立的 Cron
是屬於 root
用戶,若是定時任務在實行時主動寫入日誌或者遇到異常未捕捉,會建立 root 權限的日誌文件,最終會致使 php-fpm
的 www
帳號沒法寫入。memcached
所以須要在建立 cron 的時候指定用戶php-fpm
crontab -u www -e
我的管理的系統中 php-fpm 執行用戶都是 www,請根據本身的實際狀況調整代碼。
解決上述兩點問題後,若是仍然發現 cron 不執行,請確認spa
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
代碼最後有進行回車換行。日誌
這個坑坑了工程師一個下午 : (code