我正在开发一个部署在Kubernetes集群上的Laravel应用程序,我需要设置一个cronjob来运行php /var/www/html/artisan schedule:run
。
我用的是php:7.4-fpm-alpine
图像。
以下脚本用于生成cronjob:
#!/bin/sh
crontab -l > mycron
touch /var/cronlogs.txt
echo "* * * * * php /var/www/html/artisan schedule:run >> /var/cronlogs.txt 2>&1" >> mycron
crontab mycron
rm mycron
cronjob工作正常,但突然我遇到了一个问题,当cronjob执行一些php artisan命令时,它会以root权限将日志写入storage/logs
,这拒绝了www-data
写入日志的请求。
我尝试将运行cronjob的用户更改为www-data
,但当我这样做时,cronjob不再运行。
我做了什么:
1.我在脚本中将crontab -l > mycron
更改为crontab -u www-data -l > mycron
,将crontab mycron
更改为crontab -u www-data mycron
。
1.我将/var/spool/cron/crontabs/www-data
的所有权更改为www-data:www-data
。
crond
命令
当我运行crond
命令时没有错误,但作业没有启动。/var/spool/cron/crontabs/root
中的cronjob工作正常(存在更改日志文件的问题)。/var/spool/cron/crontabs/www-data
中的cronjob不工作。
如何让cronjobs在www-data
上运行?如果这不是解决方案,如何防止php artisan命令由root用户写入日志?
1条答案
按热度按时间mspsb9vt1#
PHP似乎是在root用户下运行的。您可以通过运行
ps aux | grep php
命令来检查PHP进程。此外,还可以通过运行命令ps aux | grep apache
来检查用户的Apache进程