相信技术的力量

crontab 指定非root用户运行脚本

crontab 脚本默认是root用户运行,在Laravel项目中,如果运行PHP-FPM的用户是非root, 比如www ,而定时任务又是root用户执行的,,会导致生成的laravel日志文件属于root,进而www用户无权限写入日志。

crontab常用命令

crontab -u //指定某个用户的cron服务
crontab -l //列出某个用户的cron服务的详细内容
crontab -r //删除某个用户的cron服务
crontab -e //编辑某个用户的cron服务

以上命令默认的用户是root,如果想指定某个用户,方式如下

crontab -u www -e //编辑www用户的命令
crontab -u www -l //查看www用户的命令列表

指定非root用户

如果直接编辑www的crontab命令,会发现其中的命令并没有执行,例如:

* * * * * /usr/bin/php /{laravel项目根目录}/artisan schedule:run >> /dev/null 2>&1

发现并不执行,而放在crontab -e中的却可以正常执行。

此时查看/var/logs/cron日志发现如下报错信息:

Apr 11 13:15:01 izuf60div2wtc0k655uschz CROND[2174]: (www) CMD (/usr/bin/php /{laravel项目根目录}/artisan schedule:run >> /dev/null 2>&1)
Apr 11 13:15:01 izuf60div2wtc0k655uschz CROND[2174]: (CRON) ERROR chdir failed (/home/www): No such file or directory

发现是由于指定了www用户的定时任务后,运行crontab命令失败了。原因是:找不到/home/www目录

/home/www创建对应目录后,命令正常执行, 日志权限问题也随之解决。

(完)

参考:

https://blog.csdn.net/cuiliwu/article/details/82623815

https://learnku.com/articles/6775/about-laravel-log-permissions

⬆️