我正在尝试使用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文件?
答案 0 :(得分:1)
这对我有用:
* 20 * * * su - www-data -C "/path/to/dailyProc.sh"
答案 1 :(得分:1)
Cron也可以按用户运行。
crontab -u www-data -e
答案 2 :(得分:0)
您不需要在crontab条目中使用su
或sudo
,因为第6列仍然是用户名。而且你不需要启动终端,因为你无论如何都不会看到它。因此,以下应该做:
* 20 * * * www-data /path/to/dailyProc.sh
您在评论中提到的Syntax error: word unexpected…
似乎在您的代码中。尝试从命令行运行脚本并从那里开始调试。
答案 3 :(得分:0)
为此,我在dailyProc.sh
中使用了curltoday=`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"