我试图在CentOS 6.4上的crontab文件中使用相对路径,这样我就不必一遍又一遍地重复相同的绝对路径。在我的crontab文件的顶部,位于/etc/crontab
,我有:
SHELL=/bin/bash
PATH=/var/www/html/crons
MAILTO=""
HOME=/
我的每个命令都是:
*/2 * * * * root /usr/bin/php "cronfile.php" >> "logs/cronfile_"`date +\%Y\%m\%d`".log"
我希望它会在cronfile.php
目录中运行/var/www/html/crons
PHP文件,并将输出保存到/var/www/html/crons/logs/cronfile.log
。但是,该文件未运行且未创建日志文件。
如果我只运行该命令就可以了:
/usr/bin/php "cronfile.php" >> "logs/cronfile_"`date +\%Y\%m\%d`".log"
cd
进入/var/www/html/crons
目录后,从命令行。
请指教,谢谢。
答案 0 :(得分:2)
/usr/bin
已在大多数系统的PATH
中,因此您应该可以从crontab顶部删除PATH
声明。
您的作业在bash shell中运行,因此您可以执行以下操作:
*/2 * * * * root cd /var/www/html/crons && php cronfile.php >> cronfile_`date +\%Y\%m\%d`.log
答案 1 :(得分:1)
经过多次试验和研究,我发现解决方案使用的是HOME=
变量,而不是PATH=
变量,如下所示:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/var/www/html/crons
然后每条线看起来都像:
*/2 * * * * root /usr/bin/php cronfile.php >> logs/cronfile_`date +\%Y\%m\%d`.log
希望这可以帮助其他人解决我将来遇到的同样问题。