Как запустить файл CodeIgniter через CRON?
В прошлом я пробовал следующий метод:
<?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 в своем браузере, он отлично работает, однако всякий раз, когда он запускается через CRON, я получаю ошибку 404. Введя следующий код в show_404()
функцию CodeIgniter
function show_404($page = '')
{
print_r($_SERVER);
echo "\n\n";
die ($page);
}
приводит к получению следующего сообщения по электронной почте:
Array
(
[SHELL] => /bin/sh
[MAILTO] => [email protected]
[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]
Здесь я [меня] вместо моего фактического имени пользователя.
Любые идеи?
Ответы
Ответ 1
Самый простой способ запуска 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
Ответ 2
Codeigniter опубликовал документацию о том, как это сделать:
http://ellislab.com/codeigniter/user-guide/general/cli.html
Ответ 3
Вы также можете добавить --spider, чтобы игнорировать ответ. Это останавливает запрос от тайм-аута:
wget -O - -q -t 1 --spider http://www.example.com/cron/run
Ответ 4
Вы также можете проверить это: Cron job bootstrapper
Это простой загрузочный файл, который можно использовать для непосредственного запуска контроллеров CodeIgniter из командной строки. Это очень простое и элегантное решение для использования контроллеров CI для работы cron. Он также поддерживает протоколирование.
Ответ 5
Существует статья wiki о том, как запустить CodeIgniter в командной строке, но это более полезно для приложений, которые должны взаимодействовать с пользователем через терминал (там тоже есть библиотека).
http://codeigniter.com/wiki/CI_on_the_command_line/
Одно из преимуществ этого способа использования wget заключается в том, что вы можете защитить свой код от запуска пользователями или ботами с помощью:
if(!empty($_SERVER['HTTP_HOST']))
{
show_error('Shove off hax0r!');
}
Ответ 6
Если вы хотите запустить задание cron, запустив url, вот отличная статья
http://www.nbill.co.uk/documentation/setting-up-a-cronjob.html
Ответ 7
Использовать php-cli вместо php
Пример:
/usr/bin/php-cli /home/CPANEL_USER/public_html/index.php cronJobs deleteNotifications