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

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

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

我已以 user@ubuntu 身份设置了 crontab。

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

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

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

我怎样才能让它默认创建具有user:www-data权限的文件?
我无法去,chown每次都重新创建文件。

谢谢。

答案1

您还可以使用参数运行 crontab-u来为特定用户编辑 crontab:

sudo crontab -u www-data -e

答案2

您可以将您的条目写入系统 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 -s /bin/bash

答案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

答案4

重要:www-data 用户没有执行权限。

因此:您需要 su 并添加 -s 以使用 shell 以 www-data 用户身份运行该命令。

Laravel 示例

    * * * * * su www-data -s /bin/bash -c "/path_your_project/artisan schedule:run"

相关内容