Как выполнить файл CodeIgniter через КРОН?

Я попробовал следующий метод в прошлом:

<?php
set_time_limit(0);
$_SERVER['PATH_INFO'] = 'cron/controller/index';
$_SERVER['REQUEST_URI'] = 'cron/controller/index';
require_once('index.php');
?>

и помещение этого в файле в codeigniter каталоге установки, вызов его cron.php и затем вызов его через:

php /home/[username]/public_html/my_project/cron.php

Если я ввожу URL к cron.php в моем браузере, он работает отлично, однако каждый раз, когда его выполнение через КРОН я получаю 404 ошибки. Вставляя следующий код show_404() функция CodeIgniter

function show_404($page = '')
{
   print_r($_SERVER);
   echo "\n\n";
   die ($page);
}

результаты в получении следующего вывода, посланного по электронной почте мне:

Array
(
   [SHELL] => /bin/sh
   [MAILTO] => me@gmail.com
   [USER] => [me]
   [PATH] => /usr/bin:/bin
   [PWD] => /home/[me]
   [SHLVL] => 1
   [HOME] => /home/[me]
   [LOGNAME] => [me]
   [_] => /usr/bin/php
   [PHP_SELF] =>
   [REQUEST_TIME] => 1266479641
   [argv] => Array
       (
           [0] => /home/[me]/public_html/my_project/cron.php
       )

   [argc] => 1
   [PATH_INFO] => cron/controller/index
   [REQUEST_URI] => cron/controllers/index
)


home/[me]

Здесь я имею [меня] вместо моего фактического имени пользователя.

Какие-либо идеи?

16
задан Click Upvote 18 February 2010 в 08:05
поделиться

3 ответа

Самый простой способ запустить cron через CodeIgniter - это сделать URL cron доступным через ваше приложение.

Затем вызовите его через wget

wget -O - -q -t 1 http://www.example.com/cron/run

Внутри контроллера вы можете использовать журнал, чтобы убедиться, что cron не запускается слишком часто, т.е. если роботы Google запустят его по ошибке.

Второй способ - использовать lynx

/usr/local/bin/lynx -source http://www.example.com/cron/run
22
ответ дан 30 November 2019 в 16:49
поделиться

В вики есть статья о том, как запустить CodeIgniter из командной строки, но это более полезно для приложений, которым необходимо взаимодействовать с пользователем через терминал ( для этого тоже есть библиотека).

http://codeigniter.com/wiki/CI_on_the_command_line/

Одним из преимуществ этого способа по сравнению с использованием wget является то, что вы можете защитить свой код от запуска пользователями или ботами с помощью:

if(!empty($_SERVER['HTTP_HOST']))
{
     show_error('Shove off hax0r!');
}
3
ответ дан 30 November 2019 в 16:49
поделиться

Если вы хотите запустить задание cron, запустив url, вот отличная статья

http://www.nbill.co.uk/documentation/setting-up-a-cronjob.html

2
ответ дан 30 November 2019 в 16:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: