使用 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 条目中使用 su
或 sudo
,因为无论如何第 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
我正在尝试使用 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 条目中使用 su
或 sudo
,因为无论如何第 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