Вначале немного представлюсь. Меня зовут Рыжонин Николай, в "1С-Битрикс" я курирую направление производительности продуктов компании. Если у вас есть вопросы, предложения или пожелания, касающиеся производительности, обращайтесь e-mail: rns@bitrix.ru
Данная тема уже не раз подымалась (например тут), но тем не менее все таки решил опубликовать обобщенное решения для выполнения всех агентов из под cron.
Для начала полностью отключим выполнение агентов на хите. Для этого выполним следующую команду в php консоли.
После этого все агенты и отправка системных событий будут обрабатывается из под cron, раз в 5 минут. Чтобы не увеличивалась очередь отправки почтовых сообщений, советую изменить параметр отвечающий за количество почтовых событий обрабатываемых за раз. Для этого выполняем в 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С-Битрикс».