laravel 配置crontab定时任务三步走:
一、直接在php-fpm容器中配置
1、env:当Cron
无法生效时,可能是Cron
执行环境变量不正确引起的;确保cron服务开启;
#环境变量配置
>env > /tmp/env.output
#cron状态查看
>service cron status
#cron服务开启
>service cron start
#查看cron命令配置
>vim /var/spool/cron/crontabs/root
#查看cron命令日志
>tail -f /var/log/cron.log
#cron服务重启
>sudo service cron restart
打开/tmp/env.output
文件,将PATH
字段整行添加至corntab
文件顶部,corntab
文件在/var/spool/cron
目录下。
2、crontab命令创建:
#查看已创建的cron命令
>crontab -l
# m h dom mon dow command
* * * * * /usr/bin/php /var/www/dev/artisan schedule:run >> /dev/null 2>&1
#查看php路径
>whereis php
php: /usr/bin/php7.2 /usr/bin/php /usr/lib/php /etc/php /usr/include/php /usr/share/php7.2-gd /usr/share/php7.2-json /usr/share/php7.2-intl /usr/share/php /usr/share/php7.2-xml /usr/share/php7.2-common /usr/share/php7.2-mbstring /usr/share/php7.2-opcache /usr/share/php7.2-sqlite3 /usr/share/php7.2-curl /usr/share/php7.2-readline /usr/share/php7.2-pgsql /usr/share/php7.2-zip /usr/share/php7.2-mysql /usr/share/php7.2-bcmath /usr/share/man/man1/php.1.gz
#添加cron命令
#小坑注:cron命令之后必须有回车换行
#小坑注:php路径必须为绝对路径,不能为相对路径
>crontab -e
# m h dom mon dow command
* * * * * /usr/bin/php /var/www/dev/artisan schedule:run >> /dev/null 2>&1
2.1、小坑注:
通过 crontab -e
命令创建的 Cron
是属于 root
用户,如果定时任务在实行时主动写入日志或者遇到异常未捕捉,会创建 root 权限的日志文件,最终会导致 php-fpm
的 www
账号无法写入。
因此需要在创建 cron 的时候指定用户:
#个人管理的系统中 php-fpm 执行用户都是 www,请根据自己的实际情况调整代码。
>crontab -u www -e
3、容器中执行任务开启命令:
>artisan schedule:run
二、laradock workspace容器中配置
最新版的laradock支持在workspace中直接配置crontab
1. 配置laradock/workspace/crontab/laradock文件
* * * * * laradock /usr/bin/php /var/www/project-name/artisan schedule:run >> /dev/null 2>&1
2.重新build workspace镜像
docker-compose build workspace
3.workspace build完毕后,重启workspace容器
docker-compose stop workspace
docker-compose start workspace