ChatGPT解决这个技术问题 Extra ChatGPT

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

关闭。此问题不符合 Stack Overflow 准则。它目前不接受答案。我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为 Stack Overflow 的主题。 2年前关闭。改进这个问题

我几乎没有在 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

M
Mike

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


当您将 crontab -e 用作特定用户时,它的工作方式相同。
但是这个 crontab 会在系统启动时检查还是仅在用户登录时检查?
*nix 系统上的 cron 不需要用户登录即可运行在特定用户的 crontab 中指定的作业。
这是否也会按照 OP 的要求设置组 ID?如果想要的组与用户的主要组不同怎么办?
P
Pamela

编辑:请注意,此方法不适用于 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 对吗?
请注意,此方法不适用于 crontab -e,但仅在您直接编辑 /etc/crontab 时才有效。阅读此文件顶部的评论以获取更多信息。
用户只能在系统crontab中指定
我在系统 crontab 上按时完成了一些工作。当我执行 sudo crontab -e 时,我看到了作业。但我打开文件 /etc/crontab 没有工作。这很奇怪吗?此外,如果我 sudo crontab -e 并添加指定用户的作业,它会起作用吗?
p
pymkin

由于您运行的是 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;但不是。
Ubuntu 文档建议不要编辑 /etc/crontab,因为它可能会被更新覆盖。 crontab -e 将在 /var/spool/cron/crontabs 中创建一个用户特定的 cron 文件。
O
Oliver Moran

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

我收到以下 VNC cron 错误:

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

在我的例子中,我可以使用 sudo 来指定以谁的身份运行任务。

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

我在日志中收到此消息:sudo: sorry, you must have a tty to run sudo
@renatoargh 您可能正在 RedHat 上运行。看看 Unix.SE 上的 this answer
R
Russell E Glaue

您也可以尝试使用 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 中。
runuser 在最新版本的 Ubuntu 中。此答案 unix.stackexchange.com/questions/169441/ubuntu-runuser-command 中讨论了 runuser 的替代方法,例如 su 和 sudo。

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅