Я попробовал следующий метод в прошлом:
<?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]
Здесь я имею [меня] вместо моего фактического имени пользователя.
Какие-либо идеи?
Самый простой способ запустить 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
В вики есть статья о том, как запустить CodeIgniter из командной строки, но это более полезно для приложений, которым необходимо взаимодействовать с пользователем через терминал ( для этого тоже есть библиотека).
http://codeigniter.com/wiki/CI_on_the_command_line/
Одним из преимуществ этого способа по сравнению с использованием wget является то, что вы можете защитить свой код от запуска пользователями или ботами с помощью:
if(!empty($_SERVER['HTTP_HOST']))
{
show_error('Shove off hax0r!');
}
Если вы хотите запустить задание cron, запустив url, вот отличная статья
http://www.nbill.co.uk/documentation/setting-up-a-cronjob.html