2013-04-15 64 views
2

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

mydev.com的是,我用我的机器上的虚拟主机,我还没有做出PHP配置(最大执行时间等)的任何变化。

此外,我在网上做了我的研究,并且安装了php5-cli,以及所有的请求依赖项。

下面

是我添加到cron文件在终端输入sudo crontab -e命令后线:

* * * * * 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) 

任何帮助非常感谢!

O.

编辑:

下面是被认为要执行的代码:

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

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

?> 

现在,即使我添加 '回声1;'在文件的开始或结束时,没有什么变化,并且输出文件CRON_LOG.txt保持为空

+1

这行看起来不错'* * * * */usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2>/dev/null' 。你的脚本中有绝对路径吗?如果手动执行,它工作正常吗? – fedorqui

+0

没有我的脚本使用DOCUMENT_ROOT SERVER超全局来包含它使用的任何文件。 是的,当通过浏览器手动访问一切似乎工作得很好。 –

+0

你确定这个用户正在被执行,因为目录'/ var/www/mydev /'具有rwx权限并且'/ var/www/mydev/CRON_LOG.txt至少具有rw权限?你是否也确定你想要的输出被写入PHP脚本的STDOUT? – DaveRandom

回答

5

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

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

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

          • 在/ usr/bin中/ PHP /无功/网络/ mydev的的/ dev/mailServiceTest。?PHP

更好的(你确认这是PHP的正确路径

晴这是有道理的 - 但如果你需要运行任何指令的频率为一次/分钟,然后通过cron运行它远非理想解决方案。

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

但是,这是毫无意义的/空的CLI SAPI

打算做你的期望。

可能会奏效,但山猫的目的是作为一个用户驱动的浏览器,并可能不会在这方面甚至开始 - wget或curl会更好。

从cron日志crond正在做它应该做的。

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

你安装了crontab文件还是只编辑它?

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

+0

在这种情况下最好使用名称空间。 它会工作吗? –

+0

命名空间与描述的问题无关 – symcbean

+0

Lot的问题在这里,如果有答案会很好。比如“你确认这是php的正确路径吗?”。我如何验证这一点? – DaveWalley