0

我几乎成功地在我的服务器上设置了一个 Cron 作业,但我无法调用正确的控制器。

当我删除 CLI only if 语句时,我可以从浏览器成功运行脚本。

// 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

结果 :

我在默认控制器的第 1 封电子邮件 HTML 输出和控制器index.php的第 2 封电子邮件输出中收到 2 封电子邮件birthdady

我的控制器的代码是。

    <?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;

}



}
?>

我不确定我做错了什么。

在此先感谢您的帮助。

4

1 回答 1

0

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

  1. 使用以下数据创建cron.php配置文件application/config

$config['CRON_TIME_LIMIT']=0;

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

$config['CRON_BETA_MODE']=false;

  1. 在根并行创建 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. 运行 cron 文件作为 php

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

于 2013-09-23T10:54:35.727 回答