Answers:
与其创建要作为root用户运行的crontab,不如为要运行脚本的用户创建crontab。对于您的情况,crontab -u www-data -e
将为www-data用户编辑crontab。只需将完整命令放在此处,然后将其从root用户的crontab中删除即可。
cron
在* nix系统上,不需要用户登录即可运行特定用户的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
。但不是。
您也可以尝试使用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中。
迈克的建议听起来像是“正确的道路”。我遇到了这个线程,该线程想指定用户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
crontab -e
作为特定用户使用时,其工作方式相同。