Laravel Cron 定時任務「跳坑」點

Laravel 中執行定時任務是經過 cron 來實現,官網文檔中就是簡單一句 + 一行Cron 代碼php

* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

可是在實際使用的過程當中,若是對 Linux 和 Cron 不熟悉,會遇到一些小坑,咱們整理並記錄了分享出來但願能幫助到你們。mysql

坑1:環境變量

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

坑2:Cron 執行用戶致使 Laravel log 不可寫

經過 crontab -e 命令建立的 Cron 是屬於 root 用戶,若是定時任務在實行時主動寫入日誌或者遇到異常未捕捉,會建立 root 權限的日誌文件,最終會致使 php-fpmwww 帳號沒法寫入。memcached

所以須要在建立 cron 的時候指定用戶php-fpm

crontab -u www -e
我的管理的系統中 php-fpm 執行用戶都是 www,請根據本身的實際狀況調整代碼。

坑3:cron 內容最後一行未回車

解決上述兩點問題後,若是仍然發現 cron 不執行,請確認spa

* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

代碼最後有進行回車換行。日誌

這個坑坑了工程師一個下午 : (code

討論交流

聯繫咱們

相關文章
相關標籤/搜索