通过cron运行的PHP脚本无法连接到数据库

时间:2011-09-22 12:20:41

标签: php mysql cron

我正在尝试通过cron job运行的PHP脚本中连接到mysql数据库。它不会以某种方式连接到数据库。我在浏览器中运行相同的脚本,一切正常。我使用免费的BSD,以下是我尝试运行的代码:

ini_set(max_execution_time,1200);
require_once("../settings.php");
$query = "insert into cron_log values(null, '". date("D d-m-Y") ."')";
mysql_query($query);
exec("convert /usr/local/www/demo/cron/test.pdf /usr/local/www/demo/cron/1.jpg");

如果我通过cron运行上面的脚本,它什么都不做。

如果我在浏览器中运行上面的脚本,它会在表格中创建新行并创建1.jpg。

如果我删除数据库部分并通过cron运行它,它会创建1.jpg文件。

可能的原因和解决方案是什么?

4 个答案:

答案 0 :(得分:4)

请注意,CLI不会更改当前工作目录。 cron也没有设置它。所以你的reqire_once调用相对于一个“随机”位置。尝试完整路径:

require_once(__DIR__."/../settings.php"); // PHP >=5.3
require_once(dirname(__FILE__)."/../settings.php"); // PHP <5.3

答案 1 :(得分:2)

最可能的原因是脚本在require_once("../settings.php");行失败。这是因为通过cron调用时脚本的工作目录与通过浏览器调用时的工作目录不同。

../settings.php更改为完整路径,例如/path/to/settings.php确认这是问题所在。

将cron行更改为php /path/to/script.php >> /path/to/logfile.txt 2>&1也是值得的,这样logfile.txt将填充脚本的输出。确保打开display_errors以捕获任何错误消息!

答案 2 :(得分:1)

我的猜测是,当你从cron运行它时,你不在正确的目录中,并且找不到settings.php文件;因此整件事都失败了。

当你从cron运行它时,请确保脚本cds到相应的目录,以便使用相对路径找到settings.php。

答案 3 :(得分:1)

是否有任何显示的错误? 请确保您指的是文件“settings.php”打印“getcwd()”的正确文件夹。 当从cron脚本开始执行时,位于“/”