Мы часто видим: сайт на Битриксе с ручным обновлением цен и остатков — ошибки, задержки, потерянные продажи. Однажды к нам обратился клиент с каталогом из 15 000 товаров: цены обновлялись раз в неделю вручную через Excel. За месяц убытки от просроченных акций составили 8% оборота. Разовый парсинг проблему не решает — нужен автоматический запуск по расписанию. Настройка парсера по расписанию (cron) для 1С-Битрикс — это ключевая задача для автоматизации обновления данных. Мы подбираем механизм (агенты Битрикса vs системный cron), реализуем блокировку параллельных запусков, настраиваем логирование и алерты. Результат — данные обновляются сами, без участия человека.
Как системный cron решает проблему обновления данных?
Агенты (b_agent) — встроенный механизм Битрикса. Они работают только когда на сайт заходит посетитель и срабатывает CAgent::CheckAgents(). При низкой посещаемости агенты опаздывают. Режим точного запуска через cron решает проблему, но требует настройки системного задания. Наш опыт показывает: для парсеров с частотой обновления раз в 30 минут системный cron надёжнее.
Системный cron — прямой вызов PHP-CLI. Никакой зависимости от веб-сервера:
*/30 * * * * /usr/bin/php -f /var/www/site/local/scripts/parser_run.php >> /var/log/parser.log 2>&1
Для тяжёлых парсеров (10 000+ позиций) системный cron предпочтительнее — нет лимитов PHP-FPM по времени выполнения. Мы гарантируем стабильность запуска в любое время, даже если сайт не нагружен.
Почему мы рекомендуем системный cron для тяжёлых парсеров?
В проекте с 50 000 товаров и обновлением каждые 30 минут агенты не справлялись: при посещаемости 200 человек в день выполнение сдвигалось на 10-15 минут. Переход на системный cron устранил задержки — обновление стало точным до секунды. Стоимость поддержки снизилась на 30% за счёт автоматизации.
Как защитить парсер от параллельных запусков?
Парсер выполняется 25 минут, cron запускает следующий через 30 — два экземпляра не пересекутся. Но если скрипт завис на 35 минут? Нужна защита. Используем блокировку через файл или Redis:
$lockFile = '/tmp/parser_' . md5($parserName) . '.lock';
if (file_exists($lockFile) && (time() - filemtime($lockFile)) < 3600) {
exit('Already running');
}
touch($lockFile);
// ... работа парсера ...
unlink($lockFile);
Для распределённых систем (несколько серверов) — блокировка через Redis: SET lock:parser NX EX 3600. Стоимость ошибки при параллельном запуске — дубликаты данных и нагрузка на сервер. Мы учитываем это в каждом проекте.
Агенты или cron: что выбрать? Сравнение
| Критерий | Агенты Битрикса (b_agent) |
Системный cron |
|---|---|---|
| Зависимость от трафика | Да | Нет |
| Лимит времени выполнения | Ограничен PHP-FPM (обычно 300 с) | Нет ограничений (PHP-CLI) |
| Точность запуска | ± несколько минут при низкой нагрузке | ± секунда |
| Сложность настройки | Встроен, не требует доступа к серверу | Требует SSH и права |
| Подходит для тяжёлых парсеров | Условно | Да |
| Поддержка логирования | Через агентские методы | Настраивается отдельно |
Пошаговая настройка cron для парсера
- Определите команду запуска — полный путь к PHP и скрипту. Проверьте версию:
which php. - Настройте логирование — перенаправьте stdout и stderr в файл с датой.
- Добавьте задание в crontab —
crontab -e, укажите расписание и команду. - Реализуйте блокировку — lock-файл или Redis.
- Протестируйте — выполните команду вручную, проверьте логи.
- Настройте алерты — отправка уведомлений при ошибках.
Этот алгоритм мы применяем в каждом проекте — он сокращает время отладки на 40%.
Настройка агентов Битрикса для парсинга
Если всё же используем агенты — регистрируем через CAgent::AddAgent():
CAgent::AddAgent(
'MyParserAgent::Run();', // функция-агент
'mymodule', // модуль
'N', // не точный
3600, // интервал в секундах
'', // дата первого запуска
'Y', // активный
date('d.m.Y H:i:s', time() + 3600) // следующий запуск
);
Агент должен быть зарегистрирован в include.php модуля или в init.php. Для продакшена рекомендуем комбинировать с системным cron через документацию 1С-Битрикс. Это даёт максимальную гибкость и точность.
Что даёт структурированное логирование?
Парсер без логов — чёрный ящик. Минимальная схема:
file_put_contents($logFile, date('[Y-m-d H:i:s] ') . $message . PHP_EOL, FILE_APPEND);
Для продакшена — структурированные логи с уровнями (info/warning/error) и ротацией через logrotate. Алерт при ошибке: если в логе за последний запуск есть строки с ERROR — отправляем email через \Bitrix\Main\Mail\Event. Это сокращает время реакции на сбои и снижает затраты на поддержку в два раза. Согласно рекомендациям Bitrix, такой мониторинг обязателен для критичных обновлений.
Что входит в работу
- Аудит текущего парсера или написание нового
- Выбор и настройка механизма запуска (cron/агенты)
- Реализация блокировки параллельных запусков
- Настройка логирования и алертов
- Тестирование расписания и сценариев ошибок
- Документация по доступам и работе парсера
- Гарантия стабильности в течение недели после запуска
Таймлайн работ
| Этап | Срок |
|---|---|
| Настройка системного cron или агента Битрикса | 1–2 часа |
| Реализация блокировки параллельных запусков | 1–2 часа |
| Настройка логирования и алертов | 2–4 часа |
| Тестирование расписания | 2–4 часа |
Итого: 6–12 часов. Стоимость рассчитывается индивидуально — оценим ваш проект за один рабочий день.
Получите консультацию по настройке парсера — пишите, мы подберём оптимальное решение под ваш бюджет. Оставьте заявку — расскажем, как автоматизировать обновление данных на вашем проекте. Свяжитесь с нами, чтобы начать автоматизацию уже сегодня.







