Найти тему

Как настроить мониторинг задач в cron

Оглавление

В вводной статье мы разобрали, что представляет из себя планировщик задач cron. Это надёжное приложение, стандарт в мире Linux. Однако не стоит забывать, что любые серверные процессы требуют мониторинга. Об этом мы также рассказали в отдельной статье.

В этой статье мы разберём настройку мониторинга cron-задач через Zabbix.

Cron создан в лучших традициях философии Unix, он выполняет только свою основную функцию — запуск задач по расписанию. Статус выполнения задач выходит за рамки его компетенции. Соответственно, в случае если задача не выполнилась или выполнилась с ошибками, без мониторинга вы об этом не узнаете.

Возможные причины неисправностей:

  • У скрипта нет прав на исполнение.
  • Закончилось место в /mnt/backups.
  • Не удалось соединиться с базой данных для снятия дампа.
  • У пользователя, который запускает скрипт, нет прав доступа к каталогам сайта.

И многие другие.

Чтобы быть в курсе выполнения cron-задач, настроим мониторинг с помощью Zabbix. Предположим, что у нас уже есть Zabbix-сервер и на сервере сайта установлен Zabbix-агент.

Каждый день в 23:30 cron запускает скрипт для резервного копирования сайта:

30 23 * * * /home/andrew/site-files-backup.sh

Скрипт создаёт архив сайта в каталоге /mnt/backups.

Модификация скрипта

Модифицируем скрипт для резервного копирования, чтобы он передавал полезную информацию Zabbix-агенту, а именно: код и дату завершения задачи.

Для этого добавим в конце файла site-files-backup.sh две команды:

echo $? > /tmp/site-backup.status
date +s > /tmp/site-backup.date


Первая команда сохранит код возврата команды архивирования в файл
/tmp/site-backup.status. В мире Linux есть договорённость, что 0 — команда завершилась без ошибок. Любые другие значения подразумевают наличие ошибок или предупреждений.

Вторая команда сохраняет текущую дату в файл /tmp/site-backup.date. Дата нам понадобится, чтобы следить за давностью архивирования. Если скрипт не запустится из cron, файлы останутся без изменений. Соответственно, мы сможем узнать что архивация не работает по старому значению даты.

В качестве примера выбран каталог временных файлов /tmp. Вы можете использовать любые другие пути для хранения данных файлов.

Настройка Zabbix-агента

Создадим конфигурационный файл /etc/zabbix/zabbix_agentd.d/backup.conf со следующим содержанием:

UserParameter=site-backup.status,cat /tmp/site-backup.status
UserParameter=site-backup.date,cat /tmp/site-backup.date

Настройка со стороны Zabbix-сервера

Добавим к серверу нашего сайта элементы (item):

Создание нового элемента
Создание нового элемента

Аналогичным образом добавляем элемент site-backup.date.

Запускаем скрипт архивирования, чтобы создались файлы site-backup.date и site-backup.status.

Перезапускаем агента:

service zabbix-agent restart

Создаём триггер

Получать метрики о состоянии резервного копирования — это первый шаг. Второй — необходимо сообщать нам, что процесс не работает.

Создаём триггер
Создаём триггер

Выражение триггера расшифровывается вот так: если последнее значение статуса не равно 0 и с последней даты архивации прошло более суток, необходимо сообщить, что «Не работает архивирование сайта cronbox.ru».

Другие варианты мониторинга

Zabbix, Prometheus и прочие системы позволяют решать самые сложные задачи мониторинга. Однако они требуют установки, ресурсов и соответствующих знаний. Если у вас нет Zabbix и вы не разбираетесь в теме мониторинга, можно использовать облачный мониторинг для серверных задач.

В облачных сервисах достаточно подключить задачи к системе мониторинга — сервис будет следить за их выполнением и уведомит вас по почте и/или в Telegram, когда:

  • задача отработала успешно;
  • задача не запустилась или отработала с ошибкой;
  • задача работала дольше, чем обычно.