Crontab不理解要执行的代码?

时间:2011-12-04 12:43:19

标签: php cron

我已经设置了一个cronjob来更新某个系统中的一堆合约。当我在浏览器中运行PHP脚本时它一切正常,但是当cronjob必须做的时候它会失败。我有点坚持这个,因为我没有很多cronjobs的经验(哎呀..我只能在DirectAdmin中设置它们。)

我的PHP脚本有一些包含在某些类中,这些包括正常工作(我通过逐行向自己发送邮件来测试它)。当包含基类时,我有一个处理自动加载的类。当我做类似Class :: GetInstance()的事情时,它会失败。

我的cronjob看起来像:

* * * * * /usr/local/bin/php /home/username/domains/domain/public_html/path/to/script.php

我该怎么做才能解决这个问题?也许不是通过PHP运行它,而是通过浏览器或其他东西?如果这是一个愚蠢的问题,我很抱歉,但我不知道这个;)

3 个答案:

答案 0 :(得分:2)

请记住,在使用/usr/local/bin/php的CLI上执行PHP时,您没有正确设置$_SERVER变量!我也有这个问题,因为我的脚本必须使用$_SERVER['DOCUMENT_ROOT']。如上所述,尝试在普通shell中运行它以查看它是否有效。或者,您可以将cronjob命令更改为:

wget -q http://yourdomain.com/path/to/script.php

通常这很有效,因为它与从普通浏览器中获取该URL完全相同。

wget手册页:http://linux.die.net/man/1/wget

答案 1 :(得分:0)

您不能总是直接调用期望通过HTTP调用的php文件。从路径来看,它是网站的一部分,通常由浏览器执行,因此我将cronjob设置为不被php-cli直接调用,而是通过对网站进行curl请求。 URL。

答案 2 :(得分:0)

“它失败”不是问题描述可以称之为足够的问题。

在crontab文件中添加此行

MAILTO=your@mail

并开始工作 您将获得脚本输出,并能够更正您的代码或提出一个明智的问题。

您也可以将stdout和stderr重定向到日志文件