Cron и фоновая обработка
PrimoCRM выполняет всю тяжелую работу в фоновом режиме: отправка кампаний, рассылка серий писем и шаги автоматизации обрабатываются запланированными задачами, а не в рамках запроса страницы. Эти задачи запускаются через WordPress cron, поэтому надежный cron гарантирует своевременную отправку писем. На этой странице объясняется, как это работает и как обеспечить стабильность.
Как PrimoCRM использует cron
Заголовок раздела «Как PrimoCRM использует cron»PrimoCRM регистрирует два пользовательских расписания и небольшой набор фоновых задач:
| Задача | Запуск | Описание |
|---|---|---|
| Отправка писем кампании | По требованию (только пока в кампании есть письма в очереди) | Доставляет кампанию ограниченными порциями |
| Обработка серий писем | Каждую минуту | Отправляет запланированные письма из серий |
| Обработка автоматизаций | Каждую минуту | Перемещает контакты по шагам автоматизации |
| Проверка здоровья очереди | Каждые 5 минут | Восстанавливает зависшие письма и перезапускает застопорившиеся кампании |
Каждая задача берет порцию работы, соблюдает временной лимит, чтобы не превышать ограничения хостинга, и перепланирует себя. Проверка здоровья каждые 5 минут служит страховочной сеткой: если отправка застопорилась, она возвращает ее в работу при следующем срабатывании.
Почему важен надежный cron
Заголовок раздела «Почему важен надежный cron»WordPress поставляется с псевдо-cron, который срабатывает только тогда, когда кто-то посещает сайт. На активно посещаемом сайте это нормально. На сайте с низкой посещаемостью могут проходить часы без единого визита, поэтому запланированные отправки не запускаются до появления следующего посетителя. Симптомом является кампания, которая зависла в состоянии “отправка” и рассылается очень медленно или не рассылается вообще.
Решение состоит в том, чтобы заменить псевдо-cron, запускаемый посетителями, на реальный cron, который срабатывает по фиксированному расписанию, в идеале каждую минуту.
Проверка работы cron
Заголовок раздела «Проверка работы cron»- Откройте PrimoCRM, затем Настройки и найдите статус системы или cron, где указано, запланированы ли задачи и когда они запускались в последний раз.
- Или установите вспомогательный плагин, такой как WP Crontrol, и убедитесь, что события
primocrm_process_sequences,primocrm_process_automationsиprimocrm_queue_health_checkприсутствуют и срабатывают.
Если кампания зависла, а на вашем сайте мало посетителей, почти всегда в этом виноват cron.
Настройка реального cron (рекомендуется)
Заголовок раздела «Настройка реального cron (рекомендуется)»Два шага: отключить псевдо-cron WordPress, затем добавить реальный cron, который запускается каждую минуту.
1. Отключение псевдо-cron
Заголовок раздела «1. Отключение псевдо-cron»Добавьте это в файл wp-config.php перед строкой “That’s all, stop editing”:
define( 'DISABLE_WP_CRON', true );Это останавливает запуск cron WordPress при загрузке страниц, поэтому ваш реальный cron становится единственным триггером.
2. Добавление реального cron каждую минуту
Заголовок раздела «2. Добавление реального 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>&1cPanel: откройте Задания 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 и серверу, а также раздел Отправка и доставляемость для настройки почтовой службы.