使用crontab从bash脚本执行php文件作为www-data

时间:2015-05-25 12:20:24

标签: php bash cron crontab

我正在尝试使用crontab在某个时间每晚运行一个php文件,但由于目录权限,php需要作为www-data运行。要将其作为www-data运行,我正在使用root crontab并在其中更改用户,如下所示:

* 20 * * * sudo -u www-data /usr/bin/env TERM=xterm /path/to/dailyProc.sh

dailyProc如下

today=`date +"%d%m%y"`

year=`date +"%y"`

dm=`date +"%m%d"`

`tar -zxf /path/to/input/$today.tgz -C /path/to/output`

echo "starting data proc"

`/usr/bin/php5 -f /path/to/dataproc.php date=$dm year=$year`

echo "data proc done"

dailyProc.sh中的所有其他命令都可以工作,但php不运行。 php正在使用输出缓冲区并将其写入文件,从命令行调用它可以正常工作,但在通过cron调用时不起作用。

我也可以使用

从命令行中以www-data运行dailyProc.sh

sudo -u www-data dailyProc.sh

一切都按预期工作。

当其中的所有其他内容工作时,我是否有任何理由无法使用crontab在dailyProc.sh中运行此php文件?

4 个答案:

答案 0 :(得分:1)

这对我有用:

* 20 * * * su - www-data -C "/path/to/dailyProc.sh"

答案 1 :(得分:1)

Cron也可以按用户运行。

crontab -u www-data -e

答案 2 :(得分:0)

您不需要在crontab条目中使用susudo,因为第6列仍然是用户名。而且你不需要启动终端,因为你无论如何都不会看到它。因此,以下应该做:

* 20 * * * www-data /path/to/dailyProc.sh

您在评论中提到的Syntax error: word unexpected…似乎在您的代码中。尝试从命令行运行脚本并从那里开始调试。

答案 3 :(得分:0)

为此,我在dailyProc.sh

中使用了curl
today=`date +"%d%m%y"`

year=`date +"%y"`

dm=`date +"%m%d"`

`tar -zxf /path/to/input/$today.tgz -C /path/to/output`

echo "starting data proc"

`/usr/bin/curl "myserver.com/dataproc.php?date=$dm?year=$year"`

echo "data proc done"