2013-08-27 38 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脚本访问只允许” –