crontab没有正确运行php脚本

时间:2013-04-15 12:21:18

标签: php ubuntu cron crontab

我正在尝试运行基于SendGrid和cron的自动邮件服务。 我已经尝试了所有可能的组合来使PHP解释器运行我的脚本, 虽然cron日志说每分钟执行一次作业,但我定义的日志文件仍为空,没有收到电子邮件,但是当我通过浏览器访问页面时,一切正常。

mydev.com是我在我的机器上使用的虚拟主机,我没有对php配置进行任何更改(最长执行时间等)。

另外,我在网上做了我的研究,我安装了php5-cli,以及所有必需的依赖项。

下面是我在终端输入sudo crontab -e后添加到cron文件的行:

* * * * * php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null
* * * * * /usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null
* * * * * /usr/bin/php http://mydev.com/dev/mailServiceTest.php   >> /var/www/mydev/CRON_LOG.txt 2> /dev/null

* * * * * /usr/bin/lynx http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null

这是cron日志中的输出:

Apr 15 15:13:01 oleg-Lenovo-G580 CRON[8948]: (root) CMD (/usr/bin/php http://mydev.com/dev/mailServiceTest.php   >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:13:01 oleg-Lenovo-G580 CRON[8947]: (root) CMD (php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:13:01 oleg-Lenovo-G580 CRON[8949]: (root) CMD (/usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:13:01 oleg-Lenovo-G580 CRON[8953]: (root) CMD (/usr/bin/lynx http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:14:01 oleg-Lenovo-G580 CRON[8964]: (root) CMD (/usr/bin/lynx http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:14:01 oleg-Lenovo-G580 CRON[8966]: (root) CMD (php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:14:01 oleg-Lenovo-G580 CRON[8965]: (root) CMD (/usr/bin/php http://mydev.com/dev/mailServiceTest.php   >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:14:01 oleg-Lenovo-G580 CRON[8970]: (root) CMD (/usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:15:01 oleg-Lenovo-G580 CRON[8992]: (root) CMD (/usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:15:01 oleg-Lenovo-G580 CRON[8994]: (root) CMD (php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:15:01 oleg-Lenovo-G580 CRON[8993]: (root) CMD (/usr/bin/php http://mydev.com/dev/mailServiceTest.php   >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:15:01 oleg-Lenovo-G580 CRON[8998]: (root) CMD (/usr/bin/lynx http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:16:01 oleg-Lenovo-G580 CRON[9009]: (root) CMD (/usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:16:01 oleg-Lenovo-G580 CRON[9011]: (root) CMD (php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:16:01 oleg-Lenovo-G580 CRON[9012]: (root) CMD (/usr/bin/lynx http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:16:01 oleg-Lenovo-G580 CRON[9010]: (root) CMD (/usr/bin/php http://mydev.com/dev/mailServiceTest.php   >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)

非常感谢任何帮助!

0

编辑:

以下是应该执行的代码:

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/classes/mailingService.php');

$myMail = new mailingService();
$myMail->execute();
$myMail->outputDuration();

?>

现在,即使我添加'echo 1;'在文件的开头或结尾,没有什么变化,输出文件CRON_LOG.txt保持为空

2 个答案:

答案 0 :(得分:5)

$ _ SERVER ['DOCUMENT_ROOT'] - 它是网络服务器的变量。 CRON在执行脚本时不使用apache。

答案 1 :(得分:1)

  
      
    •   
      •   
        •   
          •   
          • php /var/www/mydev/dev/mailServiceTest.php
          •   
        •   
      •   
    •   
  •   

cron守护程序的路径中是'php'吗?

  
      
    •   
      •   
        •   
          •   
          • / usr / bin / php /var/www/mydev/dev/mailServiceTest.php
          •   
        •   
      •   
    •   
  •   

更好(你确认这是php的正确路径吗?

大多数情况下这是有意义的 - 但是如果你需要以一分钟/分钟的频率运行任何命令,那么通过cron运行它远非理想的解决方案。

  

我的脚本使用DOCUMENT_ROOT SERVER超级全局

但对于CLI SAPI来说,这是无意义的/ null

  

  

可能会工作,但lynx旨在作为用户驱动的浏览器,甚至可能不会在这种情况下启动 - wget或curl会更好。

来自cron log crond正在做它应该做的事情。

你丢弃STDERR意味着你没有看到很多错误信息。你也没有写任何对STDOUT有用的东西。是否更新了目标日志文件的时间戳?

您是否安装了crontab文件或只是编辑它?

如果您需要DOCUMENT_ROOT,那么您需要通过HTTP访问脚本 - 检查您的系统是否可以解析它自己的名称并使用wget或curl(即从ssh会话中尝试wget http://mydev.com/dev/mailServiceTest.php)。