В вводной статье мы разобрали, что представляет из себя планировщик задач 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, когда:
- задача отработала успешно;
- задача не запустилась или отработала с ошибкой;
- задача работала дольше, чем обычно.