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

Execute php file from bash script as www-data using crontab

我正在尝试使用 crontab 在每晚的特定时间 运行 一个 php 文件,但是 php 需要 运行ning 作为 www-由于目录权限的数据。 运行 它作为 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 调用时不起作用。

我也绝对可以从命令行 运行 dailyProc.sh 使用

作为 www-data

sudo -u www-data dailyProc.sh

一切都按预期进行。

有什么原因我无法在 dailyProc.sh 中使用 crontab 运行 这个 php 文件,而它的其他一切都正常?

这对我有用:

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

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

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

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

为此我在内部使用了 curl dailyProc.sh

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"

Cron 可以是 运行 每个用户。

crontab -u www-data -e