2012-01-09 35 views
0

我有一个cron作业设置运行testemail.php。这工作正常,每分钟。 (Ubuntu的本地主机,PHP5)当php文件从另一个php调用函数时,Cron作业失败。文件

* * * * * /usr/bin/php5 -q /var/www/cocoraco/portfolio/html/testemail.php > /dev/null 2>&1 

我有它运行的一些数据库的任务,并发送电子邮件第二个文件findandemail.php。电子邮件功能定义在(并且我确实包括它如下)"../scripts/functions.php"。它不起作用,而testemail.php仍然有效。

Cron在这种情况下看起来像

* * * * * /usr/bin/php5 -q /var/www/cocoraco/portfolio/html/testemail.php > /dev/null 2>&1 
* * * * * /usr/bin/php5 -q /var/www/cocoraco/portfolio/find/findandemail.php > /dev/null 2>&1 

作为一个测试,如果我从testemail.php复制代码findandemail.php,这部分运行正常发送一个虚拟的电子邮件。我是cron的新手。

任何人都可以点亮一下吗?提前致谢。

+0

因此文件'/ var/www/cocoraco/portfolio/scripts/functions.php' _does_是否存在? – 2012-01-09 21:51:49

回答

1

当执行这样的代码代码在/usr/bin所以如果你include ../scripts/functions.php您码L运行在/usr/scripts/functions.php

ooks的文件我喜欢用__FILE__幻常量包含文件非常防弹:

include(dirname(__FILE__).'/../scripts/functions.php'); 

这应该为你做的伎俩。

+0

嗯,可能看起来像它。我会检查出来并发回。但还有一个问题。 Cron发现'findandemail.php'和'../scripts/functions.php'从那里被调用。所以应该nt目录自动改变? – aVC 2012-01-09 21:57:50

+1

如果没有主目录,否则脚本从cron用户的主目录或二进制目录执行。然而你可以在cronjob中指定目录:'* * * * * cd/var/www/cocoraco/portfolio/find /;/usr/bin/php5 -q /var/www/cocoraco/portfolio/find/findandemail.php>/dev/null 2>&1' – bardiir 2012-01-09 22:14:23

+0

工作正常。谢谢。最后一个澄清。如果我回显'dirname(__ FILE __)。'/ ../scripts/functions.php',它会给出'/ var/www/cocoraco/portfolio/html /../ scripts/checkuserlog.php'。它可以工作,但我不应该使用'scripts/filename.php'的'../'前面,对吗? – aVC 2012-01-10 02:16:31

0

我从来没有使用PHP作为可执行文件的定期任务,

我建议使用wget并记录输出到文件(取决于你的脚本)

喜欢的东西:

# m h dom mon dow command 
* * * * * wget -bqc http://domain/testemail.php 

希望这有助于...

+0

谢谢,你能告诉我为什么你从不使用PHP作为可执行文件?我会查看回复中的建议并发回。 – aVC 2012-01-09 21:59:44

+0

用php直接执行文件似乎并不像执行apache一样执行它们,配置经常不同,以防止配置问题,我只是用wget去做。 – 2012-01-10 01:48:21

+0

好的。我想我最终会遇到那些问题。 :) 谢谢! – aVC 2012-01-10 02:41:11