2013-08-27 37 views
0

我幾乎成功地在我的服務器上設置了Cron作業,但我無法調用正確的控制器。CLI(命令行界面)Cron作業沒有得到正確的控制器

當我只在語句成功運行腳本時從我的瀏覽器中刪除了CLI時。

// Make sure the request is being made by a CRON Job 
if (! $this->input->is_cli_request()) exit('Only CLI access allowed'); 

我正在通過Cron守護進程通過電子郵件發送輸出。我試過這個命令,下面是我的結果。

工作:

/usr/bin/php /home/dlp/public_html/abc.org/index.php birthday 

結果:

我得到默認控制器index.php的第一個電子郵件HTML輸出和birthdady控制器的第二個電子郵件輸出的2個電子郵件。

我的控制器的代碼是。

<?php 

defined('BASEPATH') OR exit('No direct script access allowed'); 

class Birthday extends CI_Controller { 

    function __construct() 
    { 
     parent::__construct(); 
     $this->load->helper('url'); 
     $this->load->database(); 
     $this->load->library('email'); 
    } 



    /**** function for sending news letter on birthday ****/ 
    function index() 
    { 
     error_log("birthday function call",1,"[email protected]"); 
     exit; 

} 



} 
?> 

我不知道我在做什麼錯。

在此先感謝您的幫助。

+0

您使用$ _ SERVER某處你的CLI腳本?可以張貼部分腳本,這會更有幫助 –

+0

我發佈了控制器的代碼。 – Haseeb

+0

也許你可以在cron中使用wget(http:// whatever_you_used_on_browser)而不是/ usr/bin/php調用。你可能遇到的唯一問題是如何限制呼叫者到cron –

回答

0

您只在cronjob中寫入控制器名稱,但在方法爲索引時也應寫入方法名稱。所以在你的情況下,你在你的cronjob中寫入birthday/index。 OR

  1. 與數據作爲創建application/configcron.php配置文件:

$配置[ 'CRON_TIME_LIMIT'] = 0;

$ config ['argv'] = array(1 =>'birthday');

$ config ['CRON_BETA_MODE'] = false;

  • 在根parrallel創建cron.php到應用程序文件夾包含數據作爲
  • //!/ USR/bin中/ PHP的

    <?php 
    define('CRON', TRUE); 
    
    // Load CRON config 
    require('/home/dlp/public_html/abc.org/application/config/cron.php'); 
    // Set CRON mode (live or beta) 
    define('CRON_BETA_MODE', $config['CRON_BETA_MODE']); 
    
    // Set index.php location 
    if (isset($config['CRON_CI_INDEX']) && $config['CRON_CI_INDEX']) 
        define('CRON_CI_INDEX', $config['CRON_CI_INDEX']); 
    else 
        define('CRON_CI_INDEX', '/home/dlp/public_html/abc.org/index.php'); 
    
    if (count($argv) < 2) 
        if (count($config['argv'])) { 
         $argv = array_merge($argv, $config['argv']); 
         $_SERVER['argv'] = $argv; 
        } else 
         die('Use: php cron.php controller/method'); 
    
    // Simulate an HTTP request 
    $_SERVER['PATH_INFO'] = $argv[1]; 
    $_SERVER['REQUEST_URI'] = $argv[1]; 
    //$_SERVER['SERVER_NAME'] = $config['SERVER_NAME']; 
    // Set run time limit 
    set_time_limit($config['CRON_TIME_LIMIT']); 
    
    // Run CI and capture the output 
    ob_start(); 
    
    chdir(dirname(CRON_CI_INDEX)); 
    // echo "== ".CRON_CI_INDEX; die; 
    require(CRON_CI_INDEX);   // main CI index.php file 
    $output = ob_get_contents(); 
    
    if (CRON_FLUSH_BUFFERS === TRUE) 
        while (@ob_end_flush());   // display buffer contents 
         else 
        ob_end_clean(); 
    
    echo "\n"; 
    ?> 
    
    1. 以php運行cron文件

    /home/dlp/public_html/abc.org/cron.php

    +0

    嗨,我遵循上面的步驟我得到「CLI腳本訪問只允許」 –