2012-07-09 96 views
0

我需要創建一個cron作業,我只有shell訪問權限。我知道如何用cPanel做到這一點,但這是在1and1服務器上,所以我必須使用shell。shell cron job運行一個php文件

我得到的部分,我在crontab中添加一個新的cron作業,按照1and1 FAQ,但我不知道我做錯了什麼,因爲cron作業根本沒有運行。

這就是我通常放的cPanel:

0 8 * * 1 wget 'http://my_www_domain/googlefroogle.php?feed=fy_uy_tp&key=XXXXX3f7d1' 

這是我在我現在的crontab:

0 8 * * 1 /usr/local/bin/php /homepages/XX/XXXXXXX/htdocs/googlefroogle.php?feed=fy_uy_tp&key=XXXXX3f7d1 

我缺少什麼或者做錯了嗎?順便說一句,如果我手動輸入網址在我的瀏覽器中,一切正常,所以我敢肯定腳本是好的。

回答

0

沒有回答這些問題幫我做什麼,我需要讓我結束了使用這是所謂的用crontab以下PHP文件:

$data = array('feed'=>'fy_uy_tp','key'=>'MY_KEY_HERE'); 
$url = http_build_query($data, '', '&'); 
$fullurl = 'http://www.MYSITE.com/googlefroogle.php?'.$url; 

$ch = curl_init($fullurl); 
$fp = fopen("MY_LOG_FILE.txt", "w"); 

curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 

curl_exec($ch); 
curl_close($ch); 
fclose($fp); 

萬一別人需要類似的東西......另外,還要注意這需要php5,http_build_query不能在php4上工作

0

您仍然可以在通過shell管理的crontab中使用您的cPanel「命令」。 使用

crontab -l 

要列出當前的cron作業。

crontab -e 

要編輯crontab。您需要在一些最小安裝上手動安裝crontab。

0

嘗試

*/0 */8 * * */1 /usr/local/bin/php -f /homepages/XX... 
1

據我所知,你可以在任何服務器上的一個cronjob使用wget,因此如果您繼續使用這種方式應該是沒有問題的。

現在,它不工作的原因是因爲你可以通過這種方式發送GET參數到PHP文件。 PHP以不同的方式處理命令行。請參閱Using PHP from the command line

所以你必須檢查php文件是從URL調用還是從命令行調用(這很容易,看看php_sapi_name),如果是這樣的話,使用命令行界面獲取參數或在腳本中定義它們。

if (php_sapi_name() == 'cli') { 
    if ($argc != 3) { 
     die(sprintf('Usage: %s <feed> <key>', $argv[0])); 
    } 

    $feed = $argv[1]; 
    $key = $argv[2]; 
}else{ 
    $feed = isset($_GET['feed']) ? $_GET['feed'] : null ; 
    $key = isset($_GET['key']) ? $_GET['key'] : null ; 
} 

現在你必須這樣調用腳本在您的cronjob:

php -f file.php fy_uy_tp XXXXX3f7d1 

它能做什麼,是如果腳本是從命令行中運行,它得到的參數作爲變量,如果不,然後它檢查GET參數是否存在並使用它們。

+0

呃...我可以請求更多的幫助嗎?我是一個完全noob當談到殼,所以我不知道如何做到這一點,或者我應該如何將這些參數追加到我的文件。你有可能給我更詳細的指示嗎? – user1078494 2012-07-09 21:28:43

+0

我更新了我的答案,但請寫下文檔。在命令行文檔的「用法」部分中,有一個關於如何將參數傳遞給從命令行調用的文件的示例。 – 2012-07-09 23:05:35

0

由於shell正在查找名爲「file.php?param = value」的文件,而不是「file.php」,因此無法運行帶有這種參數的文件。

如果參數都是一樣的,你可以在腳本中力來設定它們:

<?php 
    $_GET['feed'] = 'fy_uy_tp'; 
    $_GET['key'] = ... 
    $_REQUEST = $_GET; 

?> 

,然後檢查腳本並不需要一些其他變量,如$ _ SERVER ['REMOTE_ADDR ']或類似的東西。