2012-08-10 70 views
4

我有一個名爲parser2的模塊,它可以從html頁面進行解析。一切工作完美,除了cron時間表。它只是不會將我的任務添加到cron任務中,而在日誌中,我發現每個cron都運行了0個計劃任務。下一個問題,如果我手動啓動cron幾次,在我遇到死亡白屏後,唯一能幫助我的東西,它從DB刪除parser2表,然後從system.table運行update.php 。 這是應該做的這一切工作的代碼,但我不能明白的地方是錯誤這裏在drupal的cron中計劃的任務執行問題

function parser_cron_queue_info() { 
    $info = array(); 
    $info['get_parser_weather'] = array(
    'worker callback' => 'parser_weather', 
    'time' => 10,  
); 
    $query = db_select('parser_jobs', 'pn') 
    ->fields('pn', array('id','time_run_in_crone')) 
    ->condition('run_in_crone', 1) 
    ->execute(); 
    foreach ($query as $job){ 
     $info['get_parser_weather_'.$job->id] = array(
     'worker callback' => 'parser_weather', 
     'time' => $job->time_run_in_crone,  
    }; 
    } 
    return $info; 
} 


function parser_cron() { 

    $query = db_select('parser_jobs', 'pn') 
    ->fields('pn', array('id','time_run_in_crone')) 
    ->condition('run_in_crone', 1) 
    ->execute(); 
    foreach ($query as $job){ 
    $queue = DrupalQueue::get('get_parser_weather_'.$job->id); 
    $queue->createItem($job->id); 
    } 


} 

function parser_weather($job_id){ 

    $job = parser_job_load($job_id); 
    _parser_url_delete_all(); 
    _parser_url_add($job->start_url); 
    while (_parser_url_get_not_parsed()) 
    { 
     parser_parse2($job); 
    }; 
} 
+0

也許可能有另一種方法來強制這個任務運行在cron運行? – Avdept 2012-08-10 06:38:32

+0

看不到任何錯誤,你是否嘗試過用xdebug手動觸發代碼,或許使用指向cron函數的簡單菜單回調? – 2012-08-10 19:27:47

+0

問題是,在日誌中有關於cron運行的消息,並且我在common.inc行中添加了以顯示我的模塊是否運行。所以它確實如此,但爲什麼模塊不能按照預期進行解析。更多的話,如果我試圖從drupal管理部分手動運行cron,幾次運行後即時獲取死亡白屏,並在apache日誌中的一些mysql錯誤。 – Avdept 2012-08-13 07:53:12

回答

1

嘗試讓cron命令代碼生成,然後運行它在你的命令行,以確保它是正確的還要仔細檢查您的腳本運行的用戶是否有權添加新任務。

+0

不錯的想法@Wils – 2012-09-25 03:56:19