作为Cron的PHP脚本不';不起作用,但从CLI起作用

作为Cron的PHP脚本不';不起作用,但从CLI起作用,php,linux,magento,cron,Php,Linux,Magento,Cron,我有一个触发一些magento操作的php脚本,我将其设置为cron: cd /home/dir/public_html; php -f file.php; 这将启动脚本,但是由于某些原因它没有完成执行,cron以用户“user”的身份运行,当我以root用户身份从终端运行命令时,它工作得非常好。但是,它使用的所有文件都会发送给用户。我认为这是路径的问题,这就是为什么我将CD命令添加到它的前面,但事实并非如此 我认为这可能是创建锁文件的问题,我让它创建一个锁文件,运行脚本,然后删除锁文件,以防

我有一个触发一些magento操作的php脚本,我将其设置为cron:

cd /home/dir/public_html; php -f file.php;
这将启动脚本,但是由于某些原因它没有完成执行,cron以用户“user”的身份运行,当我以root用户身份从终端运行命令时,它工作得非常好。但是,它使用的所有文件都会发送给用户。我认为这是路径的问题,这就是为什么我将CD命令添加到它的前面,但事实并非如此

我认为这可能是创建锁文件的问题,我让它创建一个锁文件,运行脚本,然后删除锁文件,以防止它运行(如果它已经运行)。锁文件是生成的,但从未删除,据我所知,如果它以用户“user”的身份创建它,那么它也应该能够以该用户的身份删除它


有什么想法吗?非常感谢。

尝试放置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

尝试放置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

与其从cronjob中调用php,不如调用调用php文件的shell脚本

然后,您可以在不需要更改cronjob的情况下更改脚本运行的环境,并且可以更轻松地测试cron命令(因为您可以调用shell脚本)

然后,您可以在shell脚本中更改php脚本预期所在的目录,这将很好地解决您的问题

此外,您还可以更改ini指令、处理日志记录和shell错误处理,如将STDERR管道化到文件等


这并不完全是您的问题,但是这个问题中给出的信息可能会解决您的问题:。

不要从cronjob中调用php,而是调用一个shell脚本,然后调用php文件

然后,您可以在不需要更改cronjob的情况下更改脚本运行的环境,并且可以更轻松地测试cron命令(因为您可以调用shell脚本)

然后,您可以在shell脚本中更改php脚本预期所在的目录,这将很好地解决您的问题

此外,您还可以更改ini指令、处理日志记录和shell错误处理,如将STDERR管道化到文件等


这不完全是您的问题,但此问题中提供的信息可能会解决您的问题:。

在到达“删除锁定文件”部分之前,它可能会爆炸。我建议在各个阶段添加一些调试输出。“做这个”、“做那个”、“尝试做点什么”等等……你能通过终端命令行以“用户”的身份创建/删除锁文件吗?我想你可能已经发现了问题,“用户”没有shell访问权限。好吧,那是个愚蠢的问题。它的可能副本可能在到达“删除锁文件”部分之前被炸出。我建议在各个阶段添加一些调试输出。“做这个”、“做那个”、“尝试做点什么”等等……你能通过终端命令行以“用户”的身份创建/删除锁文件吗?我想你可能已经发现了问题,“用户”没有shell访问权限。好吧,那是个愚蠢的问题。可能是重复的