2010-10-08 73 views
6

我有幾個PHP文件由cron運行。我設置了crons使用類似這樣的命令 -Cron運行但功能不工作

crontab crontab.txt 

裏面的crontab.txt文件,我寫的cron命令: -

#(Updating tutor activities) - every minute 
* * * * * /usr/bin/wget -O - -q -t 1 http://project/cron/tutor_activities.php 

但沒有的功能都工作(數據庫查詢,發送提醒郵件等)。手動運行網址。

然後我把我的郵件地址放在MAILTO並收到郵件。在郵件中,我收到了整個頁面的HTML源代碼。郵件中預期什麼?爲什麼我的功能無法正常工作?

更新
如果我改變我的cron命令

#(Updating tutor activities) - every minute 
    * * * * * /usr/bin/wget http://project/cron/tutor_activities.php 

仍然沒有成功,這來自於我的郵件 -

--15:03:01-- http://project/cron/tutor_activities.php 
      => `tutor_activities.php' 
Resolving project... IP Address 
Connecting to test.project|IP Address|:80... connected. 
HTTP request sent, awaiting response... 301 Moved Permanently 
Location: http://project./ [following] 
--15:03:01-- http://project./ 
      => `index.html.1' 
Resolving project.... IP Address 
Connecting to project.|IP Address|:80... connected. 
HTTP request sent, awaiting response... 302 Found 
Location: http://project/home/ [following] 
--15:03:01-- http://project/home/ 
      => `index.html.1' 
Resolving project... IP Address 
Connecting to wproject|IP Address|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: unspecified [text/html] 
index.html.1 has sprung into existence. 
Retrying. 

而且很多index.html.1index.html.2文件正在積累中我的項目的根源。我不希望這些文件被創建。只是想要執行文件。

相同的結果,如果我請使用兩個命令的 -

* * * * * /usr/bin/wget http://project/cron/tutor_activities.php 

    * * * * * wget http://project/cron/tutor_activities.php 

運行php命令MAILTO集送給我這個錯誤/ bin/sh的:PHP:命令未找到。

* * * * * php /path/to/test.php 

因此,我不能使用php命令。

我在test.php裏面寫了一個簡單的mailto()。通過cron運行時郵件不會來(同時使用wgetphp失敗),但手動運行URL。

我的問題
要使其再次明確,我的主要問題是,cron的文件,內置的功能沒有運行。創建文件是次要問題。

,如果你要調用一個URL作爲的cronjob任何幫助,將不勝感激

感謝,
Sandeepan

+0

您無需在您的網絡系統上登錄即可運行這些查詢,發送郵件等,是嗎? – 2010-10-14 09:55:04

+0

我自己找到了解決方案。我接受我的問題的細節不足以讓任何人猜測實際的原因。但是,這本身就是問題所在。但是,謝謝大家的努力。我不是手動向任何人提供賞金。讓投票決定賞金。 – 2010-10-18 08:18:41

回答

1

我自己發現了這個問題。我沒有在我手動運行的crontab文件中放入相同的URL,這是我的錯誤。

在運行手動我只是在輸入網址的測試,我的瀏覽器的保存URL列表中出現,我被選擇的URL http://www.test.project.com/cron/tutor_activities.php,但在crontab文件我已經把http://test.project.com/cron/tutor_activities.php。我錯誤地認爲這將運行http://www.test.project.com/cron/tutor_activities.php(因爲我們有一個重寫規則存在將添加www

但重寫規則將其重定向到http://www.test.project.com/home。這就是郵件中HTML內容的原因。

所以,這裏最重要的是要確保我們不會錯過任何細微的事情,不要以爲我們做的一切都是正確的。在我的情況下,最好將工作URL複製粘貼到cron文件中。

7

,你將不得不使用的財產以後像wget。如果這是你的服務器上的PHP腳本會更容易使用php /...pathtomyscript.../cron/tutor_activities.php

+0

@oezi,謝謝你的回答,我已經使用了wget,而我的wget中的'-O -q -t'部分就是我沒有輸出文件。請檢查我的更新。如果我刪除了'-O - -q -t',每個cron run都會創建一個文件。我不想那樣。 – 2010-10-08 14:27:57

+0

你可以嘗試做「wget myurl>/dev/null」(或類似的東西,不知道確切的語法),它會做一個沒有可選參數的「普通」wget,並將autput存儲到/ dev/null – oezi 2010-10-08 14:34:42

+0

@oezi運行'* * * * * php/path/to/test.php'與'MAILTO'集發送給我這個錯誤'/ bin/sh:php:command not found'。我在test.php中寫了一個簡單的'mail()'。通過cron運行時,郵件不會來(使用wget和php),但手動運行URL。 – 2010-10-11 08:13:21

1

當你調用了wget與-O -,它將把下載的內容到標準輸出,這cron是通過電子郵件發送給您。在第一種情況下,它正在做它應該做的事情。

當您調用wget看到-O參數時,它會嘗試將下載的內容另存爲與下載的網頁同名的文件。如果存在,它會將增量添加到名稱中,如您所見。在第二種情況下,它正在做它應該做的事情。

從您的問題中不清楚您希望輸出的位置,但是如果您希望每次都將輸出保存到同一文件,請使用-O myfilename.html

+0

我不希望這些文件被創建。我只是想要執行文件並生成結果。但是由於結果不會到來(數據庫發生變化,郵件不會發送)。 – 2010-10-09 06:29:39

+0

好的,你的問題很多都是關於wget的輸出,不清楚你甚至不關心這個問題。我肯定會繼續添加一些服務器端日誌記錄調試到tutor_activities.php。如果它完全被調用,那麼從wget調用它無論如何都不重要。 – 2010-10-11 14:40:11

1

如果從cron /命令行正在運行PHP請確保你把完整路徑PHP可執行

1

這是完全可能的,PHP不是在cron的環境內的路徑 - 它絕對不會有相同的設置爲常規shell。嘗試使用到兩個PHP解釋器,並在cron命令PHP腳本的絕對路徑:

* * * * * /path/to/php /path/to/test.php 

作爲創建的文件,你只需要重定向添加到您的wget命令:

wget -O - ... http://....  > /dev/null 

-O -迫使wget寫下任何它下載到標準輸出的內容,然後cron會很高興地發郵件給你。通過在命令末尾添加> /dev/null,該輸出將代替進入天空中的Great Bitbucket。如果您不希望wget的stderr輸出通過電子郵件發送,您還可以在/dev/null之後添加2&>1,這會將stderr進一步重定向到標準輸出,該輸出現在將轉到/ dev/null。

+0

+1。使用'哪個php'來發現PHP可執行文件的完整路徑。 – 2010-10-15 22:23:21

0

一個簡單而安全的(沒有.tmp文件)的方式來做到這一點是使用bash的進程替換:

* * * * * bash -c "/path/to/php <(/usr/bin/wget -O - -q -t 1 http://project/cron/tutor_activities.php)" 

進程替換內<()運行命令並將輸出到只可見一個文件對象從當前的過程。爲了從cron中使用它,直接調用bash並將其作爲命令字符串傳遞。

和其他人一樣,使用php的完整路徑,你可以通過which php找到。

7

嘗試

的PHP

被返回應該放在與被傳遞到運行的Cron文件。如果通過殼牌設立的Cron命令的路徑,它不會給任何問題,但要放心,嘗試運行一個php頁面時給絕對路徑。

/路徑/到/ PHP /路徑/到/ cron的/腳本/

試着給你的COMAND這樣,如果問題仍然存在,隨時洽談。

相關問題