Перейти к содержимому

Cron и фоновая обработка

PrimoCRM выполняет всю тяжелую работу в фоновом режиме: отправка кампаний, рассылка серий писем и шаги автоматизации обрабатываются запланированными задачами, а не в рамках запроса страницы. Эти задачи запускаются через WordPress cron, поэтому надежный cron гарантирует своевременную отправку писем. На этой странице объясняется, как это работает и как обеспечить стабильность.

PrimoCRM регистрирует два пользовательских расписания и небольшой набор фоновых задач:

Задача Запуск Описание
Отправка писем кампании По требованию (только пока в кампании есть письма в очереди) Доставляет кампанию ограниченными порциями
Обработка серий писем Каждую минуту Отправляет запланированные письма из серий
Обработка автоматизаций Каждую минуту Перемещает контакты по шагам автоматизации
Проверка здоровья очереди Каждые 5 минут Восстанавливает зависшие письма и перезапускает застопорившиеся кампании

Каждая задача берет порцию работы, соблюдает временной лимит, чтобы не превышать ограничения хостинга, и перепланирует себя. Проверка здоровья каждые 5 минут служит страховочной сеткой: если отправка застопорилась, она возвращает ее в работу при следующем срабатывании.

WordPress поставляется с псевдо-cron, который срабатывает только тогда, когда кто-то посещает сайт. На активно посещаемом сайте это нормально. На сайте с низкой посещаемостью могут проходить часы без единого визита, поэтому запланированные отправки не запускаются до появления следующего посетителя. Симптомом является кампания, которая зависла в состоянии “отправка” и рассылается очень медленно или не рассылается вообще.

Решение состоит в том, чтобы заменить псевдо-cron, запускаемый посетителями, на реальный cron, который срабатывает по фиксированному расписанию, в идеале каждую минуту.

  • Откройте PrimoCRM, затем Настройки и найдите статус системы или cron, где указано, запланированы ли задачи и когда они запускались в последний раз.
  • Или установите вспомогательный плагин, такой как WP Crontrol, и убедитесь, что события primocrm_process_sequences, primocrm_process_automations и primocrm_queue_health_check присутствуют и срабатывают.

Если кампания зависла, а на вашем сайте мало посетителей, почти всегда в этом виноват cron.

Два шага: отключить псевдо-cron WordPress, затем добавить реальный cron, который запускается каждую минуту.

Добавьте это в файл wp-config.php перед строкой “That’s all, stop editing”:

define( 'DISABLE_WP_CRON', true );

Это останавливает запуск cron WordPress при загрузке страниц, поэтому ваш реальный cron становится единственным триггером.

Выберите вариант, который подходит вашему хостингу.

WP-CLI (лучший вариант, если у вас есть доступ по SSH):

* * * * * cd /path/to/wordpress && wp cron event run --due-now >/dev/null 2>&1

Бинарный файл PHP (также отлично подходит при доступе по SSH):

* * * * * php /path/to/wordpress/wp-cron.php >/dev/null 2>&1

cPanel: откройте Задания Cron, установите расписание на каждую минуту (* * * * *) и используйте одну из команд выше с полным путем к вашему сайту.

Нет доступа по SSH (общий хостинг)? Используйте бесплатный сервис удаленного cron, такой как cron-job.org, чтобы вызывать ваш URL cron по протоколу HTTP каждую минуту:

https://yoursite.com/wp-cron.php?doing_wp_cron

Зарегистрируйтесь в сервисе, добавьте этот URL, установите интервал в 1 минуту и сохраните. Это вызывает cron WordPress извне по фиксированному расписанию.

  • Кампания зависла в состоянии “отправка”. Почти всегда дело в cron. Убедитесь, что реальный cron срабатывает каждую минуту и задана константа DISABLE_WP_CRON. Проверка здоровья каждые 5 минут возобновит отправку, как только запустится cron.
  • Автоматизации или серии писем выполняются с опозданием. У вашего cron слишком большой интервал, или псевдо-cron ожидает посетителей. Перейдите на реальный cron с интервалом в 1 минуту.
  • Ничего не отправляется вообще. Независимо от cron, убедитесь, что ваш метод отправки настроен и тестовое письмо приходит. Cron управляет тем, когда запускается работа, а почтовая служба управляет тем, доставляется ли она.
  • Ограничения ЦП на общем хостинге. Задачи имеют временные лимиты и снижают нагрузку при ее повышении, поэтому они безопасны для общего хостинга. Если ваш хостинг все равно жалуется, немного больший интервал (от 2 до 5 минут) снизит частоту в обмен на оперативность.

Смотрите также раздел Требования для ознакомления с требованиями к PHP и серверу, а также раздел Отправка и доставляемость для настройки почтовой службы.