我有一个触发一些magento操作的php脚本,我把它设置为cron:
cd /home/dir/public_html; php -f file.php;
这启动了脚本,但由于某种原因它没有完成执行,cron以用户“user”运行,当我从终端以root身份运行命令时,它完美运行。但是,它使用的所有文件都是用户使用的。我认为这是路径的一个问题,这就是我将CD命令添加到它前面的原因,但不是这样。
我认为这可能是创建锁文件的问题,我让它创建一个锁文件,运行脚本,然后删除锁文件以防止它运行(如果已经存在)。生成锁文件但从未删除,我的知识是,如果它创建为用户“user”,那么它应该能够删除它作为该用户。
有什么想法?非常感谢。
答案 0 :(得分:3)
尝试放置PHP的完整路径,或在crontab的第一行定义PATH变量:
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/sbin:/usr/sbin
修改:此外,您可以像这样记录脚本:
* * * * * cd /home/dir/public_html; /usr/bin/php -f file.php; &>/tmp/file.log
答案 1 :(得分:1)
不是在cronjob中调用php,而是调用一个调用php文件的shell脚本。
然后您可以更改脚本运行的环境,无需更改cronjob,您可以更轻松地测试驱动cron命令(因为您可以调用shell脚本)。
然后,您可以在shell脚本中更改php脚本期望的目录,这将最有效地解决您的问题。
此外,您可以更改ini指令,处理日志记录和shell错误处理,例如将STDERR传送到文件等。
这不是您的问题,但此问题中提供的信息可能会解决您的问题:How can I force PHP Version for Command Line?。