Первоисточник, но мне этой инструкции оказалось мало, я ее дополнила.
Для начала полностью отключим выполнение агентов на хите. Для этого выполним следующую команду в php консоли.
COption::SetOptionString("main", "agents_use_crontab", "N"); echo COption::GetOptionString("main", "agents_use_crontab", "Y"); COption::SetOptionString("main", "check_agents", "N"); echo COption::GetOptionString("main", "check_agents", "Y"); |
После этого убираем из файла /bitrix/php_interface/dbconn.php определение следующих констант:
define("BX_CRONTAB_SUPPORT", true); define("BX_CRONTAB", true); |
if(!(defined("CHK_EVENT") && CHK_EVENT===true)) define("BX_CRONTAB_SUPPORT", true); |
Создаем файл проверки агентов и рассылки системных сообщений /bitrix/php_interface/cron_events.php
<?php //тут бывали ошибки - неправильный путь, можно прописать вручную $_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__)."/../.."); $DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"]; define("NO_KEEP_STATISTIC", true); define("NOT_CHECK_PERMISSIONS",true); define('BX_NO_ACCELERATOR_RESET', true); define('CHK_EVENT', true); define('BX_WITH_ON_AFTER_EPILOG', true); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); @set_time_limit(0); @ignore_user_abort(true); CAgent::CheckAgents(); define("BX_CRONTAB_SUPPORT", true); define("BX_CRONTAB", true); CEvent::CheckEvents(); if(CModule::IncludeModule('sender')) { \Bitrix\Sender\MailingManager::checkPeriod(false); \Bitrix\Sender\MailingManager::checkSend(); } require($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/main/tools/backup.php"); CMain::FinalActions(); ?> |
И добавляем данный скрипт в cron
*/1 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php |
исправила так:
/usr/bin/php -d display_errors -d short_open_tag /var/www/bitrix/php_interface/cron_events.php |
*/1 * * * * - частота запуска, можно воспользоваться Crontab генератором
/usr/bin/php - путь до php, может быть и другой путь у php, уточнить у админа хостинга
/home/bitrix/www/ - это тоже зависит зависит от сервера, чтобы узнать, распечатать в командной строке $_SERVER;
Можно добавить через админ-панель хостинга (интерфейс от хостинга зависит)Можно через ssh, например, с помощью программы putty
указываем hostName или IP адрес, порт 22, ssh, в connection data указываем autologin-username - login, нажимаем Open - вводим пароль
Работа в терминале с crontab
Текущие задания на крон (у текущего пользователя)
crontab -l |
crontab -r |
crontab имя_файла_расписания |
crontab -u username |
Добавить задание
Откроем редактор
crontab -e |
no crontab for sk - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- простейший 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny 4. /bin/ed Choose 1-4 [1]: |
У меня был vim (документация по vim)
-перейти в режим редактирования нажать i
-добавить строку, например, */1 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php
-вернуться в обычный режим <ESC>
-потом ввести :wq и нажать <ENTER>
---------------------------------------------------------------------------
Как выйти из редактора Vi или Vim?
Прежде чем ввести команду, нажмите Esc. Чтобы потом подтвердить команду, нажмите Enter.
Клавиша Esc переключает Vim в нормальный режим. Если в этом режиме нажать : (проверьте, что установлена английская раскладка и снят CapsLock, затем одновременно нажмите Shift и ; , то символ : появится в нижней части экрана, и редактор перейдёт в режим командной строки. Это гарантирует, что вы сейчас именно вводите команду, а не редактируете файл. Помните, что регистр вводимых команд важен.
У большинства команд есть укороченные версии. Необязательная часть дается в квадратных скобках: к[оманда].
Команды, данные курсивом, подходят только для Vim (не реализованы в Vi).
Выйти безопасно (не срабатывает, если есть не сохраненные изменения)
- :q[uit] Выйти из текущего окна Vim. Если это окно — последнее, то выйти из Vim. Если в текущем буфере есть не сохраненные изменения, команда не сработает.
- :qa[ll] Закрыть все окна и выйти из Vim. Не сработает, если хотя бы в одном буфере есть не сохраненные изменения.
Выйти с подтверждением (запрашивает подтверждение, если есть не сохраненные изменения)
- :conf[irm] q[uit] Закрыть все окна и выйти из Vim. Запрашивает подтверждение, если есть буферы с не сохраненными изменениями.
- :conf[irm] xa[ll] Сохранить все изменения, закрыть все окна и выйти из Vim. Запрашивает подтверждение, если какие–либо буферы не могут быть сохранены.
Записать (сохранить) изменения и выйти
- :wq Записать текущий буфер в соответствующий ему файл (даже если изменений не было) и закрыть окно. :wqa[ll] для всех окон.
- :wq! То же самое, но записывает даже файлы, отмеченные только для чтения (read-only). :wqa[ll]! для всех окон.
- :x[it], ZZ(но с некоторыми особенностями). Сохранить файл только если в нем есть изменения и выйти, :xa[ll] для всех окон.
Отменить (и потерять) изменения и выйти
- :q[uit]! ZQ Выйти без сохранения, в том числе когда есть изменения в видимых буферах. Не сработает, если изменения есть также и в скрытых буферах.
- :qa[ll]!, :quita[ll][!] Выйти без сохранения, отменяя все изменения как в видимых, так и в скрытых буферах.
Нажмите Enter чтобы выполнить введенную команду.
------------------------------------
После этого все агенты и отправка системных событий будут обрабатывается из под cron, раз в 5 минут. Чтобы не увеличивалась очередь отправки почтовых сообщений, советую изменить параметр отвечающий за количество почтовых событий обрабатываемых за раз. Для этого выполняем в php консоли следующую командуCOption::SetOptionString("main", "mail_event_bulk", "20"); echo COption::GetOptionString("main", "mail_event_bulk", "5"); |