参考
Lnmp环境运行时一般会指定用户www运行。因此配置定时任务的时候,也需要使用www用户来运行定时任务,否则会造成laravel生成的日志是其它用户,导致laravel运行报错,没有日志的可写权限。
配置方法
1.获取当前系统PHP的环境变量
执行 env > /tmp/env.output 然后 cat /tmp/env.output
找到PATH
PATH=/usr/local/mysql/bin:/usr/local/php/bin:/usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
2.设置定时任务 -u 参数指定用户 命令参考 给www用户的crontab 添加环境变量PATH
crontab -u www -e
将PATH添加到crontab的第一行,
换行后将laravel的定时任务代码加上,截图中第二行, 制定了环境变量后,可以只写php 不用写php的完整路径 /usr/local/php/bin/php
3,不能遗漏的关键一步
在home目录下创建对应用户的文件目录,www 并修改用户权限为www 最后重启定时任务
cd home && mkdir www && chown -R www.www www
service crond restart
如果没有该用户的目录,crontab日志会有报错
(CRON) ERROR chdir failed (/home/www): No such file or directory
知识总结
Crontab详细介绍可以头部的参考链接,和《鸟哥linux私房菜-基础学习篇》第16章
任务调度分为两类: 系统任务调度 和 用户任务调度
系统任务配置/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
前四行是用来配置crond任务运行的环境变量,
- 第一行SHELL变量指定了系统要使用哪个shell,这里是bash,
- 第二行PATH变量指定了系统执行命令的路径,
- 第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户,
- 第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。
- 第五行 前五个星号代表时间, user-name代表执行的用户,command代表执行的命令
crontab – u xxx -e 是用来设置用户系统任务调度的
所有用户定义的crontab文件都被保存在/var/spool/cron
目录中。其文件名与用户名一致,使用者权限文件如下
/etc/cron.deny 该文件中所列用户不允许使用crontab命令
/etc/cron.allow 该文件中所列用户允许使用crontab命令
/var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名
注意单独用户的crontab配置需要设置 PATH 并创建对应用户目录
service crond start # 启动服务
service crond stop # 关闭服务
service crond restart # 重启服务
service crond reload # 重新载入配置
service crond status # 查看状态