我正在尝试通过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文件。
可能的原因和解决方案是什么?
答案 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脚本开始执行时,位于“/”
中