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

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

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

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

不要创build一个以root用户身份运行的crontab,而要为要运行脚本的用户创build一个crontab。 在你的情况下, crontab -u www-data -e将编辑www-data用户的crontab。 只要把你的完整命令放在那里,并从root用户的crontab中删除它。

编辑:请注意,这种方法将无法与crontab -e一起使用,但只适用于直接编辑/ etc / crontab。 否则,您可能会收到如/bin/sh: www-data: command not found的错误/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中条目的格式,以及如何input命令:

 # mh 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用户有权访问它们。

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

我得到了VNC cron的以下错误:

 vncserver: The USER environment variable is not set. Eg: 

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

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

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