关闭。此问题不符合 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
不要创建 crontab 以作为 root 用户运行,而是为要运行脚本的用户创建 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
crontab -e
,但仅在您直接编辑 /etc/crontab
时才有效。阅读此文件顶部的评论以获取更多信息。
sudo crontab -e
时,我看到了作业。但我打开文件 /etc/crontab
没有工作。这很奇怪吗?此外,如果我 sudo crontab -e
并添加指定用户的作业,它会起作用吗?
由于您运行的是 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
;但不是。
迈克的建议听起来像是“正确的方式”。我遇到了这个线程,希望指定用户在重新启动时在 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
您也可以尝试使用 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 中。
crontab -e
用作特定用户时,它的工作方式相同。cron
不需要用户登录即可运行在特定用户的 crontab 中指定的作业。