当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

我很少在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

最佳回答

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

次佳回答

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

第三种回答

由于您正在运行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用户可以访问它们。

第四种回答

您也可以尝试使用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

第五种回答

迈克的建议听起来像”right way”。我遇到了这个线程,希望指定用户在重新启动时运行vncserver,并希望将我的所有cron作业都放在一个位置。

VNC cron出现以下错误:

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

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

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8751.html,未经允许,请勿转载。