我正在研究Laravel 应用程序部署在 Kubernetes 集群上,我需要设置一个 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 复制代码“ 到 ”crontab -u www-data mycron“在剧本中。
2- 我改变了所有权/var/spool/cron/crontabs/www 数据到 www-data:www-data
3-我运行了 crond 命令。
我运行 crond 命令时没有错误,但作业没有启动。
/var/spool/cron/crontabs/root 中的 cronjob 运行良好 - 但日志文件问题不断改变。
/var/spool/cron/crontabs/www-data 中的 cronjob 不起作用。
如何使 cronjobs 由 www-data 运行?如果这不是解决方案,如何防止 php artisan 命令由 root 用户写入日志?