Вначале немного представлюсь. Меня зовут Рыжонин Николай, в "1С-Битрикс" я курирую направление производительности продуктов компании. Если у вас есть вопросы, предложения или пожелания, касающиеся производительности, обращайтесь e-mail: rns@bitrix.ru
Данная тема уже не раз подымалась (например тут), но тем не менее все таки решил опубликовать обобщенное решения для выполнения всех агентов из под cron.
Для начала полностью отключим выполнение агентов на хите. Для этого выполним следующую команду в php консоли.
После этого все агенты и отправка системных событий будут обрабатывается из под cron, раз в 5 минут. Чтобы не увеличивалась очередь отправки почтовых сообщений, советую изменить параметр отвечающий за количество почтовых событий обрабатываемых за раз. Для этого выполняем в php консоли следующую команду
Сделали все по инструкции, но появилась неустранимая ошибка: " Ошибка! Есть ошибки при отправке системных почтовых сообщений, число неотправленных сообщений: ХХХХ Определена константа BX_CRONTAB_SUPPORT в /bitrix/php_interface/dbconn.php, при этом должен быть настроен вызов агентов на cron." 3 дня все проверяли, Проблема решилась установкой в настройках главного модуля параметра "Сколько писем отправлять за один хит:" = 100
Ryzhonin Nikolay написал: Создаем файл проверки агентов и рассылки системных сообщений /bitrix/php_intarface/cron_events.php
Для того, чтобы в уведомлениях от модуля Техподдержки приходили корректные ссылки на прикрепленные к обращениям файлы, в начале этого файла нужно задать $_SERVER["HTTP_HOST"]
Добрый день. Есть ли какая-то статистика - какой прирост производительности (на высоко нагруженных серверах) дает выполнение агентов через крон? У меня 99% - стандартные агенты ядра. Вот думаю, стоит ли перекидывать на крон? Спасибо.
Правда ли если события на агенете, то почта через почтовые события будет отсылаться с сайта после какого-то следующео хита? Допустим малопосещаемый сайт - раз в год заходит туда человек в форме обратной связи отсылает сообщение и ему пишет успех и аж через год оно отошлётся. То есть для куцых сайтов - это актуальнее даже что бы периодично события срабатывали.
Может я не прав но думаю так. Вот хочу быть уверен.
последний файл уже был сразу после установки битрикса, так что я в нем ничего не менял. Если вставить файл с инструкции - все равно та же история. Создаю своего агента, в нем отправка письма и запись в файл лога, выставляю ему время запуска на пару минут вперед (время на сервере проверял, все сходится), жду письма и записи в лог - ничего. из командной строки выполняю
и все равно ничего. на крон повесил эту же команду. Если выполнять без ключа n - PHP ругается:
PHP Warning: realpath(): open_basedir restriction in effect. File(/var/...) is not within the allowed path(s): (none) in /var/.../bitrix/php_interface/cron_events.php on line 3 PHP Warning: require(): open_basedir restriction in effect. File(/bitrix/modules/main/include/prolog_before.php) is not within the allowed path(s): (none) in /var/.../bitrix/php_interface/cron_events.php on line 10 PHP Warning: require(/bitrix/modules/main/include/prolog_before.php): failed to open stream: Operation not permitted in /var/.../bitrix/php_interface/cron_events.php on line 10 PHP Fatal error: require(): Failed opening required '/bitrix/modules/main/include/prolog_before.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/.../bitrix/php_interface/cron_events.php on line 10
Модули из маркета не используем принципиально, интересует только встроенный функционал. Как написали выше, создавать отдельный файл тоже не хотим. Выше (http://dev.1c-bitrix.ru/community/web...5#com30375) Николай писал, что когда родной крон_ивентс станет для BitrixEnv скриптом для крона по умолчанию, то файл поправят, вот и хотели поинтересоваться - произошло ли это. Судя по всему нет, а файл тем не менее стал для BitrixEnv крон-скриптом по умолчанию.
Хотелось бы напомнить им об этом и чтобы они поправили и добавили необходимые строки ( CAgent::CheckAgents(); define("BX_CRONTAB_SUPPORT", true); define("BX_CRONTAB", true); CEvent::CheckEvents(); )
Антон Козлов , если не хотите использовать модуль — посмотрите его исходный код, что он делает. Тогда у вас получится всё тоже самое сделать на событиях. Там нет ничего нестандартного, криминального или запрещенного.
Модуль всего лишь отключает выполнение всех агентов на хитах пользователей и включает для /bitrix/modules/main/tools/cron_events.php вызов всех агентов ( а не только непериодических, как у Битрикса сделано).
Козлов Антон, на самом деле, любые варианты этой задачи (агенты/почта на хитах/кроне) решаются с помощью стандартного cron_events.php, путем правильного подбора настроек. Исключение: выполнение периодических агентов с помощью cron (непериодические можно). Главное, определиться с условиями задачи. Пока не понятно, какое поведение требуется.
Условия задачи растут из появления полноценного регулярного резервного копирования(с полным перечнем настроек, как у обычного), который никак не хотел работать без CRONTAB, true. После установки этой константы перестали работать уведомления с веб-форм, и, конечно, прочие почтовые события.
Служба тех поддержки направила сюда, за ответом - каким образом сохранить рег.рез.копирование и остаться с отправками е-майл уведомлений. Прочли и пост и комментарии - остался вопрос про родной cron_events.php - нужно ли создавать другой файл или не нужно?
Уже смирились с тем, что придется создавать свой.
Артемий Зайцев , спасибо за ссылку на "Вашу аналогичную статью" - в ней как раз все понятно объяснено, как написал выше - смирились с тем, что надо создавать свой файл.
Козлов Антон, введение своего файла — это правильное решение. Своим файлом гораздо проще управлять.
Тем не менее, если я правильно понял предпосылки, то согласно учебному курсу, в данном конкретном случае вообще не обязательно изменять схему выполнения агентов/отправки уведомлений. Конечно, если она устраивает. Достаточно установить в crontab выполнение следующей команды:
export BX_CRONTAB="Y" && /usr/bin/php <путь к корню>/bitrix/modules/main/tools/backup.php
А в dbconn.php добавить следующие две строки:
if (getenv("BX_CRONTAB") === "Y")
define("BX_CRONTAB", true);
В этом случае, константа BX_CRONTAB будет устанавливаться исключительно для скрипта резервного копирования.
Козлов Антон, хорошо, тогда как насчет варианта перевода всех почтовых отправлений и всех агентов (периодических и не очень) на выполнение с помощью cron? Для этого достаточно убрать из dbconn.php определения констант BX_CRONTAB_SUPPORT и BX_CRONTAB и добавить следующие строки:
при создании файла проверки получил такую ошибку Parse error: syntax error, unexpected '<' in C:\Bitrix\www\bitrix\modules\main\admin\php_command_line.php(77) : eval()'d code on line 1 что с этим делать дальше?
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».