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

时间:2011-12-12 14:18:13

标签: ubuntu cron crontab

我在根目录下运行的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

5 个答案:

答案 0 :(得分:301)

不是创建以root用户身份运行的crontab,而是为要运行脚本的用户创建crontab。在您的情况下,crontab -u www-data -e将编辑www-data用户的crontab。只需将完整的命令放在那里,然后将其从root用户的crontab中删除。

答案 1 :(得分:44)

编辑:请注意,此方法不适用于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

答案 2 :(得分: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用户可以访问它们。

答案 3 :(得分: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

答案 4 :(得分:8)

迈克的建议听起来像是“正确的方式”。我遇到了这个线程想要指定用户在重启时运行vncserver并希望将我所有的cron作业保存在一个地方。

我收到了VNC cron的以下错误:

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

就我而言,我能够使用sudo来指定将任务作为运行对象。

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