2012-01-09 27 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