我想每 5 分钟运行一次 crontab 命令来执行 py 脚本。py 脚本依次在 /var/www/logs/ 中生成一个午夜轮换的日志文件。logs 目录具有 777 权限。
日志文件具有午夜轮换,并且当创建新文件时,它会以 root 所有者身份创建。如何确保所有权保持为 www-data,因为其他一些脚本也会写入同一文件,并且拥有 root 所有权会导致其他脚本的权限问题。
一种方法是输入命令,
crontab-u www数据-e
这工作正常,但我想在 root 用户下维护我的所有 cron 命令。
我尝试使用 sudo 执行相同操作,但它以 root 作为所有者创建,这不是我想要的。
答案1
所以你想拥有
- 所有 crontab 都放在 root 下的同一个位置
- 每 5 分钟执行一些 Python 代码
- 使用用户 www-data 执行脚本
由于 su 不适用于 www-data(如评论中所述),因此如果系统上有 sudo,则可以改用 sudo。手册页上写道
sudo, sudoedit — 以另一个用户身份执行命令
在你的情况下这意味着你使用
sudo crontab -e
以 root 用户身份编辑 crontab。在 crontab 中,添加sudo -u www-data python
命令以执行python
ad user www-data
。
*/5 * * * * sudo -u www-data python /my/python/log/script.py
答案2
更多的解决方法,但您也可以让您的脚本按原样运行root
,并让文件由创建root
。然后在最后添加
&& sudo chown www-data <your Log file>
最终将文件的所有权转移给www-data
。
(如果文件数量多于您可能还会对-R
“递归”标志感兴趣,以便对整个文件夹及其内容运行 chown)
答案3
我想在 root 用户下维护我的所有 cron 命令。
要将所有cron
作业(可以以各种用户身份运行)集中在一个地方,请忘记该crontab
命令并改为在文件中编辑系统范围的 crontab /etc/crontab
,或者将您自己的 crontab 添加到目录中/etc/cron.d
。正如您所预料的,它将需要 root 访问权限。
这些文件看起来很像任何其他 crontab,但它们包含用户名列,因此您只需指定目标用户而不必使用sudo
或诸如此类的东西。
请记住,与命令不同crontab
,您直接编辑系统配置文件,因此退出编辑器后不会检查您的更改。所以请仔细编辑它们。