【发布时间】:2015-08-06 22:19:04
【问题描述】:
我正在尝试使用 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
一切都按预期进行。
有什么原因我无法在dailyProc.sh 中使用 crontab 运行这个 php 文件,而其中的其他一切都正常工作?
【问题讨论】:
-
您在脚本中使用
#!/bin/bash吗? -
有两个以 root 权限运行的 crontab 文件。一个是
/etc/crontab,另一个是/var/spool/cron/crontabs/root。您正在使用其中之一吗? -
检查
crontab -l以确保您的 crontab 已注册。另外,检查日志,可能在/var/log/syslog -
@alex 不,但脚本中的其他所有内容都运行良好,我需要它还是只是更好的做法?要编辑我使用
sudo contab -e的crontab,我读到编辑etc/crontab不是一个好主意,因为系统可以覆盖它? -
@JohnCartwright 这两个都表明
dailyProc.sh正在运行,它是,但是它里面的 php 不是。