以 www-data 身份运行 crontab,创建一个以 www-data 为所有者的文件

以 www-data 身份运行 crontab,创建一个以 www-data 为所有者的文件

我想每 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 命令以执行pythonad 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,您直接编辑系统配置文件,因此退出编辑器后不会检查您的更改。所以请仔细编辑它们。

相关内容