CLI(命令行界面)Cron Job无法获得正确的控制器

时间:2013-08-27 08:33:22

标签: php codeigniter cron command-line-interface

我几乎成功地在我的服务器上设置了一个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,"abc@gmail.com");
        exit;

}



}
?>

我不确定我做错了什么。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您只在cronjob中编写控制器名称,但是当方法是索引时,您也应该编写方法名称。所以在你的情况下,你在你的cronjob中写birthday/index。 OR

  1. cron.php中创建application/config配置文件,数据为:
  2.   

    $配置[ 'CRON_TIME_LIMIT'] = 0;

         

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

         

    $配置[ 'CRON_BETA_MODE'] = FALSE;

    1. 在root并行创建cron.php到包含数据为
    2. 的应用程序文件夹
        

      //!/ 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
      2.   

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