2011-12-12 34 views
129

我有几个crontab作业在根目录下运行,但这给我一些问题。例如,在该cron作业的过程中创建的所有文件夹都在用户root和组root下。 我怎样才能使它运行在用户万维网数据和组万维网数据,所以当我从我的网站上运行脚本我可以操纵这些文件夹和文件?如何在crontab中指定运行脚本的用户?

我的服务器在Ubuntu上运行。
目前的crontab任务是:

*/1 * * * * php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1 

回答

253

而不是创建一个crontab作为root用户运行,请为您想运行的用户的crontab剧本。在你的情况下,crontab -u www-data -e将编辑www数据用户的crontab。把你的完整命令放在那里,并从根用户的crontab中删除它。

+35

当你使用'crontab -e'作为特定​​用户时,它的工作方式相同。 – kulak

+0

它不适用于我你能帮我:( – vishal

+5

但是这个crontab会在系统启动时被检查,或者只有当用户登录时才被检查吗? –

36

编辑:请注意,此方法不会与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 
+0

这将使其运行的Apache用户女巫是www数据权? – arma

+0

非常感谢!将立即尝试。 – arma

+13

嗯回去'/ bin/sh:www-data:command not found' – arma

7

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

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

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

在我的情况,我能够用sudo指定谁运行任务的。

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

我在日志中看到了以下消息:'sudo:对不起,你必须有一个tty来运行sudo' – renatoargh

+0

@renatoargh你可能正在RedHat上运行。看看[这个答案](http://unix.stackexchange.com/questions/122616/why-do-i-需要一个tty-to-run-sudo-if-i-can-sudo-without-a-password)在Unix.SE. – kaiser

11

既然你运行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用户有权访问它们。

+0

我认为这应该等同于'crontab -e'虽然;但不是。 – zinking

+5

Ubuntu文档建议不要编辑/ etc/c rontab,因为它可以被更新覆盖。 crontab -e将在/ var/spool/cron/crontabs中创建一个用户特定的cron文件。 – Hemm

6

您也可以尝试使用runuser(根)为不同的用户

*/1 * * * * runuser php5 \ 
      --command="/var/www/web/includes/crontab/queue_process.php \ 
         >> /var/www/web/includes/crontab/queue.log 2>&1" 

参见运行命令:man runuser

+0

“runuser”不包含在Ubuntu中。 – Raptor

+1

runuser是最新版本的Ubuntu。在这个答案http://unix.stackexchange.com/questions/169441/ubuntu-runuser-command中讨论的runuser也有其他选择,例如su和sudo。 –