如何以user:www-data身份运行crontab?


32

我的LAMP设置为可以使用,user:www-data并且所有文件和文件夹均使用该权限创建。

我已经将crontab设置为user @ ubuntu。

所以我这样做crontab -e并使用此命令:

*/5 * * * * php /var/www/public/voto_m/artisan top >/dev/null 2>&1

基本上,该命令仅在指定的位置创建缓存文件(对此没有问题),但是该缓存文件是使用user:user权限而非user:www-data权限创建的。

我如何才能使其默认情况下创建具有user:www-data权限的文件?
我不能走,chown每次都重新创建文件。

谢谢。


请注意,某些以www-data运行的crontab脚本(例如,对于awstatsphp5sessionclean)位于/etc/cron.*目录中,因此无法通过其看到crontab -e(即使在指定用户www-data时)。
Skippy le Grand Gourou

Answers:


40

您可以将条目写到系统crontab中/etc/crontab,该条目带有一个附加参数,用于指定要以其身份运行的用户(通常是root,但可以是www-data)。

您的行将变为:

*/5 * * * * www-data php /var/www/public/voto_m/artisan top >/dev/null 2>&1

或者,您可以使用以下命令编辑用户www-data的crontab su

sudo su -c "crontab -e" www-data

1
实际上,第二个选项在大多数版本的Ubuntu上均
不起作用

第二个选项对我来说适用于12.04LTS。也许它不在更高版本上?
mivk 2015年

1
第二个选项不适用于14.04
dgoosens

为了便于管理,行也可以放在它自己的文件中/etc/cron.d使用描述性名称,例如/etc/cron.d/artisan
fkraiem

2
对于第二种选择,请尝试使用此方法sudo su -c "crontab -e" www-data -s /bin/bash
伦费尔(Lunfel)

51

您也可以运行带有-u参数的crontab来编辑特定用户的crontab:

sudo crontab -u www-data -e

这适用于14.04
dgoosens

3

要以用户www-data身份运行crontab,可以使用以下命令:

crontab -u www-data -e

然后编写一行,例如每15分钟运行一个php文件:

*/15  *  *  *  * php -f /path_to_cron/cron.php

保存时,编辑器会询问您:

File Name to Write: /tmp/crontab.HMpG7V 

将其保存在那里,无需担心。crontab -e在/ tmp而不是实际的crontab中打开一个文件,以便它可以检查新的crontab中是否有错误,并防止您用这些错误覆盖实际的crontab。如果没有错误,那么您的实际crontab将被更新。如果crontab -e只是直接写到您的实际crontab,那么您将有可能浪费掉整个crontab。

要验证您的cronjob是否运行,可以检查cron日志。通常在/var/log/cron.log中或执行以下命令:

crontab -u www-data -l

这是我在Ubuntu上为我工作的
tristanbailey

四年多以前,代码指挥官先前已经正确,简洁地回答了这个问题。您省略了“ sudo”的使用。并提交了有关cron行格式的不需要的信息。
HörmannHH

@RichieHH,为什么要添加sudo?谁说用户尚未以root用户身份运行?任何使用此命令的人都应该有足够的知识,知道他是否需要以特权方式运行该命令,必须使用sudo来运行它,否则最好不要碰..您会更简洁地说...?代码指挥官只是键入了命令,但没有提供更多信息
spacebiker

..如果您那么聪明,那么最好开始给出答案,而不要批评别人的工作,也许然后您就会赢得一些声誉
spacebiker

-1

我想添加另一种方法。正如其他人所提到的,Ubuntu(此处为16.04)和www-data crontab似乎不可靠(也许是安全问题?)。

无论如何,在我们公司中,我们希望可以轻松访问服务器上的所有cronjob,因此您不会错过任何东西。同时,我们不想以root用户身份运行所有内容(真正的任何内容!)。

因此我们跑

sudo crontab -e 

像通常一样,然后将命令指定为

* * * * * /bin/su - www-data -s /bin/bash -c '/path/to/command'

这会将/ path / to / command作为www-data执行,同时将cronjob保留在根cronjobs文件中(并且该文件将始终正确运行)。这样做的好处是可以使用管道以root身份写入日志文件(为了最大安全性)。

请注意,我们正在传递首选的shell,对于更简单的shell,它也可以是/ bin / sh(我们就像完整的bash功能一样)。Www-data没有指定外壳,所以如果没有它,您将得到错误。通常,cron仅使用/ bin / sh运行作业。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.