2013-04-15 234 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