CLI (интерфейс командной строки) Cron Job не получает правильный контроллер

Я почти успешно настроил задание 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 Daemon. Я пробовал эту команду, и вот мои результаты.

работа:

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

Результат:

Я получаю 2 электронных письма в 1-м выводе электронной почты HTML контроллера по умолчанию index.php и во 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,"[email protected]");
        exit;

}



}
?>

Я не уверен, что я делаю неправильно.

Заранее спасибо за помощь.


person Haseeb    schedule 27.08.2013    source источник
comment
вы используете $_SERVER где-то в своем сценарии CLI? Можно выложить часть скрипта, было бы полезнее   -  person Aaron Gong    schedule 27.08.2013
comment
выкладываю код контроллера.   -  person Haseeb    schedule 27.08.2013
comment
Возможно, вы можете использовать wget (whatever_you_used_on_browser) вместо вызова /usr/bin/php в cron. Единственная проблема, с которой вы можете столкнуться, это выяснить, как ограничить вызывающего абонента cron.   -  person Aaron Gong    schedule 27.08.2013
comment
@Aaron Gong, это не проблема ограничения вызывающего абонента для cron. потому что на каждый вызов я получил 2 электронных письма в ответ в 1-м электронном выводе HTML контроллера по умолчанию index.php и во 2-м электронном выводе контроллера дня рождения.   -  person Haseeb    schedule 27.08.2013
comment
@Haseeb, твой код в порядке. Проблема, скорее всего, в настройках cron. Пусть ваш cron выполняет php-cli вместо php. Константа STDIN, используемая создателями кода is_cli_request(), не всегда устанавливается при запуске стандартного исполняемого файла PHP php.   -  person Jeemusu    schedule 27.08.2013
comment
@jeemusu теперь cron работает нормально, но в ответном письме я получаю это. Set-Cookie: ci_session=a%3A5%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%2204254cee466c2f02a1fc531d33b952c0%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A7.0.0%222%3Bs%3A7.0.0%2204254cee466c2f02a1fc531d33b952c0%. 0.0%22%3Bs%3A10%3A%22user_agent%22%3Bb%3A0%3Bs%3A13%3A%22last_activity%22%3Bi%3A1377596162%3Bs%3A9%3A%22user_data%22%3Bs%3A0%3A%22% 22%3B%7Da37971bd9f9a80187b07b8cc0ba410d8; expires=вторник, 27 августа 2013 г., 11:36:02 по Гринвичу; path=/ Тип контента: text/html   -  person Haseeb    schedule 27.08.2013
comment
Нет сообщений об ошибках? Можете ли вы опубликовать код?   -  person Jeemusu    schedule 28.08.2013
comment
@Jeemusu, что выше?   -  person Haseeb    schedule 28.08.2013
comment
Приведенное выше не является сообщением об ошибке как таковым, но кажется, что ваш HTML-заголовок выплевывается.   -  person Jeemusu    schedule 29.08.2013


Ответы (1)


Вы пишете только имя контроллера в cronjob, но вы также должны писать имя метода, когда метод является индексным. Итак, в вашем случае вы пишете birthday/index в своем cronjob. ИЛИ

  1. Создайте файл конфигурации cron.php в application/config с такими данными:

$config['CRON_TIME_LIMIT']=0;

$config['argv'] =массив(1 => 'день рождения');

$config['CRON_BETA_MODE']=ложь;

  1. Создайте cron.php в корне параллельной папке приложения, содержащей данные как

//!/USR/бен/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

person Needhi Agrawal    schedule 23.09.2013
comment
Привет, я выполнил шаги, описанные выше. Я получаю доступ только к сценарию CLI. - person Prasad Shinde; 25.08.2016