У меня такая работа cron:
/usr/bin/php /var/www/website/public_html/index.php className methodName
Если я запускаю его в терминале, он запускается, но ничего не выводит. Если я передаю неправильное имя метода, он будет успешно выполнен. Если я передаю неправильное имя класса, он выдает ошибку сайта 404.
У меня также есть маршрутизация, которая добавляет «en» в url, например
http://www.website.com/en/home/index
может ли это быть проблемой?
мои настройки config.php:
$config['uri_protocol'] = 'AUTO'; $config['index_page'] = '';
шаги по подготовке CodeIgniter 2.x для cron-заданий через CLI (интерфейс командной строки):
1-й: создайте копию корневого файла index.php
и сохраните ее в корне как cli.php
2nd: в вашем cli.php замените <?php
на этот код:
#!/usr/local/bin/php <?php /* override normal limitations */ set_time_limit(0); ini_set('memory_limit', '256M'); /* deny direct call from web browser */ if (isset($_SERVER['REMOTE_ADDR'])) die('Permission denied.'); /* constants */ define('CMD', 1); /* manually set the URI path based on command line arguments... */ unset($argv[0]); /* except the first one */ $_SERVER['QUERY_STRING'] = $_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'] = '/' . implode('/', $argv) . '/';
с#!/usr/local/bin/php <?php /* override normal limitations */ set_time_limit(0); ini_set('memory_limit', '256M'); /* deny direct call from web browser */ if (isset($_SERVER['REMOTE_ADDR'])) die('Permission denied.'); /* constants */ define('CMD', 1); /* manually set the URI path based on command line arguments... */ unset($argv[0]); /* except the first one */ $_SERVER['QUERY_STRING'] = $_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'] = '/' . implode('/', $argv) . '/';
3-й: выполните свою работу cron следующим образом:
/usr/bin/php /var/www/website/public_html/cli.php controller method
где /var/www/website/public_html/
– домашний каталог вашего сервера, расположение вашего index.php
и cli.php
.
заметки:
для CI 3.0 вы найдете здесь необходимую информацию
базы данных: вам нужно предоставить свои настройки конфигурации db в вашем методе контроллера, поскольку задание cron просто выполняет метод контроллера. Поэтому он ничего не знает о настройках базы данных!
$config['hostname'] = "localhost"; $config['username'] = "username_admin"; $config['password'] = "password"; //etc.. $this->db = $this->load->database($config, TRUE);
debug: просто добавьте ссылку в свой html, чтобы запустить свой метод контроллера, например: index.php/controller/method
(удалите это, как только вы нажмете сайт)
источник: очень полезно
Я думаю, что это самый простой способ заставить codeigniter работать при работе cron,
Вы можете использовать curl в заданиях cron для выполнения или запуска codeigniter в cron jobs. Пример:
* * * * * /usr/bin/curl https://www.domain.com/controller/function
вы также можете запускать cron-файл с терминала без cli.php
.it не является обязательным файлом.
Я запускаю cron с моего сервера, используя следующий синтаксис: /usr/bin/php /var/www/project1/index.php controllerName methodName >> /var/log/project1/logFile.txt