Переводим агенты на Cron
В Битриксе агенты могут работать на хитах
при загрузке страницы сайта или на cron
программа-демон на сервере.
После установки Битрикс, агенты работают на хитах, но лучше переводить их на cron
, особенно при малой посещаемости сайта, в этом случае время запуска агента на хите может сильно отличиться от заданного.
Для перевода агентов на cron
понадобиться сервер с установленным cron
.
Скрипты, которые должны запускаться на cron
:
- /bitrix/modules/main/tools/cron_events.php
- /bitrix/php_interface/cron_events.php
Для дальнейшей работы нужно получить путь до файловой системы сайта, чтобы построить корректный путь до скриптов, которые будут запускаться на cron
. Для этого создаем тестовый файл с PHP кодом в корне сайта и запускаем его:
bitrix.testprint_r($_SERVER['DOCUMENT_ROOT']);
Мы получили путь до файловой системы сайта, в моем случае это:
/home/bitrix/ext_www/bitrix.test
Подключаемся к серверу через SSH используя SSH клиент.
Для начала следует проверить, не прописаны ли в cron
выше упомянутые файлы, прописываем команду и смотрим список текущих скриптов, запускаемых cron
:
crontab -l
Для добавления новых скриптов в список запуска cron
используем команду:
crontab -e
Добавляем с помощью редактора следующие строки:
* * * * * /usr/bin/php -f ваш_путь_до_сайта/bitrix/modules/main/tools/cron_events.php
*/5 * * * * /usr/bin/php -f ваш_путь_до_сайта/bitrix/php_interface/cron_events.php
В моем случае:
* * * * * /usr/bin/php -f /home/bitrix/ext_www/bitrix.test/bitrix/modules/main/tools/cron_events.php
*/5 * * * * /usr/bin/php -f /home/bitrix/ext_www/bitrix.test/bitrix/php_interface/cron_events.php
После проделанной работы, добавляем в файл /bitrix/php_interface/dbconn.php
код:
define('BX_CRONTAB_SUPPORT', true);
Теперь агенты выполняются на cron
:
Если после описанных выше действий, агенты не начали работать на cron, то переходим в Настройки -> Инструменты -> Командная PHP-строка
и исполняем следующий код:
COption::SetOptionString("main", "agents_use_crontab", "N");
echo COption::GetOptionString("main", "agents_use_crontab", "N");
COption::SetOptionString("main", "check_agents", "N");
echo COption::GetOptionString("main", "check_agents", "Y");