如何在crontab中由哪个用户指定运行脚本?[关闭]


176

我几乎没有在root下运行的crontab作业,但这给我带来了一些问题。例如,在该cron作业过程中创建的所有文件夹都位于用户root和组root下。如何使其在用户www-data和www-data组下运行,以便从网站运行脚本时可以操纵这些文件夹和文件?

我的服务器在Ubuntu上运行。
当前的crontab作业是:

*/1 * * * * php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

Answers:


332

与其创建要作为root用户运行的crontab,不如为要运行脚本的用户创建crontab。对于您的情况,crontab -u www-data -e将为www-data用户编辑crontab。只需将完整命令放在此处,然后将其从root用户的crontab中删除即可。


53
crontab -e作为特定用户使用时,其工作方式相同。
kulak 2014年

7
但是,是否在系统启动时或仅在用户登录时检查此crontab?
Bruno Finger

11
cron在* nix系统上,不需要用户登录即可运行特定用户的crontab中指定的作业。
麦克

2
是否还会按照OP的要求设置组ID?如果一个人想要的组不同于用户的主要组怎么办?
2015年

48

编辑:请注意,此方法不适用于crontab -e,但仅在直接编辑/ etc / crontab时有效。否则,您可能会收到类似/bin/sh: www-data: command not found

在程序名称之前:

*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

这将使其作为apache用户巫婆运行,而www-data对吗?
arma

19
请注意,此方法不适用于crontab -e,但仅在/etc/crontab直接编辑时才有效。阅读此文件顶部的注释以获取更多信息。
imgx64 2013年

5
用户只能在系统crontab中指定
詹姆斯罗斯

我在crontab系统上按计划有一些工作。当我这样做时sudo crontab -e,我看到了工作。但是我打开文件/etc/crontab没有作业。这很奇怪吗?另外,如果我sudo crontab -e添加了用户指定的工作,它还能工作吗?
eNeMetcH 2016年

14

由于您正在运行Ubuntu,因此系统crontab位于/etc/crontab

作为root用户(或使用sudo),您可以简单地编辑此文件并指定应运行此命令的用户。这是系统crontab中条目的格式以及应如何输入命令:

# m h dom mon dow user  command
*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

当然,应该设置您的php脚本和日志文件的权限,以便www-data用户可以访问它们。


我认为这应该等同于crontab -e。但不是。
zinking 2014年

5
Ubuntu文档建议不要编辑/ etc / crontab,因为它可能会被更新覆盖。crontab -e将在/ var / spool / cron / crontabs中创建用户特定的cron文件。
Hemm 2014年

9

您也可以尝试使用runuser(以root用户身份)以其他用户身份运行命令

*/1 * * * * runuser php5 \
            --command="/var/www/web/includes/crontab/queue_process.php \
                       >> /var/www/web/includes/crontab/queue.log 2>&1"

也可以看看: man runuser


runuser不包含在Ubuntu中。
猛禽

1
runuser是Ubuntu的最新版本。如本答案unix.stackexchange.com/questions/169441/ubuntu-runuser-command中所述,还有runuser的替代方法,例如su和sudo。
罗素E格劳

8

迈克的建议听起来像是“正确的道路”。我遇到了这个线程,该线程想指定用户vncserver在重新引导下运行,并希望将我的所有cron作业都放在一个位置。

VNC cron出现以下错误:

vncserver: The USER environment variable is not set. E.g.:

就我而言,我可以sudo用来指定谁来运行任务。

@reboot sudo -u [someone] vncserver ...

1
我在日志中收到此消息:sudo: sorry, you must have a tty to run sudo
Renato Gama 2015年

@renatoargh您可能正在RedHat上运行。看看Unix.SE上的答案
kaiser 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.