Вначале немного представлюсь. Меня зовут Рыжонин Николай, в "1С-Битрикс" я курирую направление производительности продуктов компании. Если у вас есть вопросы, предложения или пожелания, касающиеся производительности, обращайтесь e-mail: rns@bitrix.ru
Данная тема уже не раз подымалась (например тут), но тем не менее все таки решил опубликовать обобщенное решения для выполнения всех агентов из под cron.
Для начала полностью отключим выполнение агентов на хите. Для этого выполним следующую команду в php консоли.
После этого все агенты и отправка системных событий будут обрабатывается из под cron, раз в 5 минут. Чтобы не увеличивалась очередь отправки почтовых сообщений, советую изменить параметр отвечающий за количество почтовых событий обрабатываемых за раз. Для этого выполняем в php консоли следующую команду
Для того что бы вся почта нормально отправлялась по крону необходимо настраивать свой скрипт для запуска. Стандартный скрипт указанный в cron, при данных настройках не отработает.
Спасибо за инструкцию! Только маленькое замечание из практики:при развёртке bitrixVM эпизодически получается так,что почта не отправляется с помощью крона. php.ini используется один и тот же. Но в логах битрикса (табличка b_event) пишется статус F. При этом если с рнр-консоли на сайте пнуть CEvent::ExecuteEvents(), то письма уходят. Вылечилось тем, что в dbconn.php строчку define("CACHED_b_event", 3600); заменили на define("CACHED_b_event", false);
Добрый день, Николай! Столкнулся с такой проблемой: В скрипте, повешенном на cron ни в какую не отрабатывает метод COption::SetOptionInt. Ошибок никаких не выдается, но и значение опции не устанавливается/меняется. Прошу посоветовать решение проблемы.
День добрый. Проделал все процедуры, в лог крона сыпятся ошибки такого содержания PHP Fatal error: Class 'CWebDavUpdater' not found in /var/www/company/bitrix/modules/main/classes/mysql/agent.php(162) : eval()'d code on line 1
на некоторых хостингах нет такой возможности, есть только настройки Панели, что делать тогда ? а в панели есть вариант раз 1 минуту или раз в 1 час и т.д.
раз в 5 минут например ставите, и команду прописываете примерно такую /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php >/dev/null 2>&1
в cron поставить задание на ежеминутный запуск скрипта/var/www/bitrix/modules/main/tools/cron_events.php. (замените /var/www на свой путь к корню сайта).
Добрый день, сделал все по инструкции, но при проверке получаю ошибку: Ошибка! Есть ошибки при отправке системных почтовых сообщений, число неотправленных сообщений: 19 Определена константа BX_CRONTAB_SUPPORT в /bitrix/php_interface/dbconn.php, при этом должен быть настроен вызов агентов на cron.
Сделали все по инструкции, но появилась неустранимая ошибка: " Ошибка! Есть ошибки при отправке системных почтовых сообщений, число неотправленных сообщений: ХХХХ Определена константа 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 что с этим делать дальше?
Аккуратно копирую содержимое файла проверки отсюда и вставляю в командную строку PHP. до этого все команды прошли успешно. Ошибка кода где именно? куда смотреть?
На данный момент при переводе агентов полностью на крон необходимо создавать свой файл их вызова и именно его подключать в кроне. Изменение стандартного файла сделаем в случае если данный способ запуска будет способом по умолчанию в BitrixEnv/BitrixVM
а также
Для того что бы вся почта нормально отправлялась по крону необходимо настраивать свой скрипт для запуска. Стандартный скрипт указанный в cron, при данных настройках не отработает.
В версии BitrixEnv/BitrixVM 5.1.2, насколько я знаю, работа агентов и почты на кроне стала способом по умолчанию. По крайней мере у нас таким образом установились настройки агентов и почты после установки BitrixEnv/BitrixVM и создании с помощью нее дополнительный сайтов. Скажите на данный момент стандартный файл cron_events.php изменен для корректной отправки почты на кроне? И как обстоит дело с переводом на крон почты в многосайтовой конфигурации, организованной с помощью BitrixEnv/BitrixVM.Ведь теперь для каждого сайта определены свои настройки почты.
Или все также нужно создавать свой файл cron_events.php для запуска?
Почтовые сообщения отправятся корректно и стандартным скриптом. А вот если вы хотите перевести на крон всех агентов, в том числе и периодических то вам необходимо делать свой файл.
Почтовые сообщения отправятся корректно и стандартным скриптом.
Нет, в том то и дело, что не отправляется корректно по умолчанию. По крайней мере в версии 5.1.2 веб окружения. Вынуждены были перевести отправку почты с агента на хит. Ведь по умолчанию в веб окружении почта отправляется на агенте. Тикет №592787 в техподдержке.
Или вместо "bitrix" указать имя пользователя от которого работает сайт. Я пишу просто применительно к виртуальной машине Битрикс.
У некоторых еще может быть проблема если эта строка последняя в файле crontab, кто-то рекомендовал добавить две пустые строки в конец файла (у меня проблем не было, но видел тех кому помогало).
Мунасипов Сергей написал: Так работать не будет. Обязательно нужно добавить так: */5 * * * * bitrix /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php Или вместо "bitrix" указать имя пользователя от которого работает сайт. Я пишу просто применительно к виртуальной машине Битрикс.
У некоторых еще может быть проблема если эта строка последняя в файле crontab, кто-то рекомендовал добавить две пустые строки в конец файла (у меня проблем не было, но видел тех кому помогало).
Алиев Мурад, Так это же не команда, эту строчку надо прописать в файле /etc/crontab
Для удобства можно сначала установить файловый менеджер командой yum install mc Потом открыть его командой mс и найти там нужный файл, нажать F4 и отредактировать его, прописав необходимую строку
Не могу понять, что делает флаг "agents_use_crontab"
1// Если мы выполняем COption::SetOptionString("main", "agents_use_crontab", "Y"), то на хитах остануться работать только периодические агенты (т.е. эта строка подключает крон для непериодических агентов?).
2// А если выполним COption::SetOptionString("main", "agents_use_crontab", "N"), то что?.... по смыслу ведь вроде получается наоборот: мы ОТКЛЮЧАЕМ, а не включаем использование крона...
Не могу понять, что делает флаг "agents_use_crontab"
Влад Седой , всё верно. $agents_use_crontab - неудачное, непонятное название опции. Влияет на то, будет ли ли функция CheckAgents вызывать периодические или непериодические агенты. Почитайте статью Выполнение всех агентов на cron. Чтобы почта была на хитах, я постарался разобраться с настройками.
Советую, чтобы не забивать себе голову, использовать модуль Агенты на кроне.
Добрый день, долго отрабатывала функция mail, думал, этот пост поможет, уже разобрался в чем дело, теперь интересует, если я все изменения убрал кроме:
Все хорошо, но внесите в шапку вариант когда все на cron - почта на хитах. а то пока у пользователя еще сервер обработает, мое мнение что почта должна работать как можно быстрей
Сделал по инструкции, но какая-то ошибка мешает отправке. При ручном запуске команды: /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php
на выходе html-код и ошибка Fatal error: Class 'Bitrix\Mail\Message' not found in /home/bitrix/www/bitrix/modules/main/lib/mail/eventmessagethemecompiler.php(273) : eval()'d code on line 26
Прежде, чем добавлять скрипт в крон, нужно проверить в терминале уже имеющиеся задания. Команда
crontab -l
потом нужно найти эти задания. Вопрос в том, какой файл крон использует. На моём "Битрикс:Веб-окружение - Linux" это был файл без расширения, с названием как имя пользователя (root или bitrix) в папке var/spool/cron/ И когда нашли, нужно изменить время срабатывания, а потом проверить, чтобы агенты стали отрабатывать через это время. Т.е. что действительно система реагирует на изменения этого файла. Также про запись */5. Я лично долго искал, что значит "/5". Если написать "5", то это будет "5-я минута часа". Т.е."5 * * * * " означает в 00:05, 01:05 и т.д. А вот "*/5" означает каждую пятую минуту. Т.е. "*/5 * * * *" означает в 00:00, 00:05, 00:10 и т.д. Сама звёздочка означает "каждый, любой".
Ошибка! Есть ошибки при отправке системных почтовых сообщений, число неотправленных сообщений: 1 Определена константа BX_CRONTAB_SUPPORT в /bitrix/php_interface/dbconn.php, при этом должен быть настроен вызов агентов на cron. Закеширована информация об отправке почты, возможно это произошло в результате сбоя, попробуйте очистить весь кеш.
Такую ошибку написал, все сделал как в описание, только задачу в крон добавил руками через интерфейс хостера timeweb.
Ошибка! Есть ошибки при отправке системных почтовых сообщений, число неотправленных сообщений: 4598 Определена константа BX_CRONTAB_SUPPORT в /bitrix/php_interface/dbconn.php, при этом должен быть настроен вызов агентов на cron.
Алексей Паничев, у вас, наверное, используется шаблон письма, внутри которого вызов $APPLICATION->ShowHead(); При запуске шаблона из под крона, $APPLICATION неопределён. Добавьте в начало global $APPLICATION; и должно заработать.
Подскажите в чем может быть ошибка. Запускаю команду вручную, получаю: Fatal error: Class 'CEvent' not found in /var/www/bitrix01/bitrix/modules/main/tools/cron_events.php on line 15
в cron указал */5 * * * * /usr/bin/php -f /home/www/xn--24-dlchfbaxyor2bbo4kh.xn--p1ai/bitrix/php_interface/cron_events.php при выполнении Exited with return code = 127 или не нужно было менять путь до своего файла cron_events.php ?
Спасибо, сделал всё как здесь описано... ан нет, не работает. Оказалось, надо просто-напросто перезапустить Cron командой - service crond restart. А бился ж пол дня, почему не описываете такие мелочи? Сюда же не только Гуру заходят...
п.с. кстати после того как я за комментировал, скрипт запустился и отработал, после чего я раскомментировал строку и все продолжило работать (только теперь уже корректно)
Силуянов Александр, Сначала сделал файл как написано в секции "Создаем файл проверки агентов и рассылки системных сообщений /bitrix/php_interface/cron_events.php (обновлен 10.09.2015)"
Затем добавил в кронтаб в эту строчку: */5 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php
Царев Дмитрий, установил модуль "Агенты на кроне" из маркетплейса. В его настройках, внизу написано: Настройка cron
cron — это программа на сервере, которая запускается раз в минуту и выполняет ваши команды в указанное время.
Для работы агентов на кроне необходимо настроить, чтобы стандартный файл Битрикса /bitrix/modules/main/tools/cron_events.php вызывался, например, раз в минуту.
В Виртуальной машине Битрикса ничего не надо делать, там уже есть соответствующая настройка для каждого сайта (файл /etc/crontab). На специализированных хостингах под Битрикс тоже могут быть заранее сделаны настройки.
У вас Виртуальная машина Битрикса версии 7.2.2.
На других хостингах в панели управления укажите что-то вроде: * * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php
Вместо /usr/bin/php, у вас может быть другой путь. Узнайте у техподдержки вашего хостинга, как правильно настраивать крон, или найдите в часто задаваемых вопросах на сайте хостинга.
Важно. Настройка крона на вашем сервере — это обязанность администратора сервера или техподдержки хостинга. В обязанности разработчика модуля не входит.
_____________________
Может там и не надо ни чего настраивать. Как вообще проверить отрабатывает ли агент на кроне?
Силуянов Александр, судя по всему для вас тема новая и непонятная. Лучше возьмите и передайте задачу толковому админу. Там по этой инструкции (статья) делов на 15 минут, когда работаешь (или работал) с этим ранее. Я все делал на машине из коробки, крон стоит там по дефолту всегда, никакие модули из маркетплейса не устанавливал. Все руками из консоли. Проведение манипуляций без понимания что к чему не приводит (обычно) к хорошему. Вот мой вам совет.
Царев Дмитрий, благодарю вас за совет, но наш it департамент таков, что сами ни хрена не знают и не умеют. До этого все сайты разворачивал на хостинге и проблем с добавлением агентов не испытывал, ибо имеется интерфейс добавления. Сейчас сделал проверку проекта в битриксе - показывает что все ок и агенты выполняются на cron))
Еще раз скажите, пожалуйста, что необходимо сделать ? При запуске агента на почту падает письмо плана "Cron <kurin@kanc> /usr/bin/php -f /var/www/html/kanc-org/local/php_interface/cron_events.php"
Сделал по инструкции, при ручном запуске файла выдаёт ошибку: PHP Parse error: syntax error, unexpected 'class' (T_CLASS), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in /bitrix/modules/main/lib/loader.php on line 578
Силуянов Александр, Да. Так и будет, потому что с 99% вероятностью Вам нужен не crontab root`а, crontab пользователя под которым установлена система. Чаще всего это bitrix, но может быть что угодно. В зависимости от того как установили. У меня это название сайта. Тогда команда должна выглядеть так: crontab -u <имя_пользователя> -e Где -u - это ключ вызывающий crontab конкретного пользователя -e - это ключ, который говорит о том, что Вы хотите его отредактировать. Если хотите через nano, то должно быть так EDITOR=nano crontab -u <имя_пользователя> -e
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».