Повышение надёжности crontab: логгинг и уведомления

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

cronлоггингrsyslog

ℹ️ Когда в системе запускается много cron-задач, отладка ошибок и мониторинг их выполнения превращается в боль. Вместо того чтобы разбираться с отсутствием результатов спустя часы или дни, можно внедрить простой механизм автоматического логгинга и уведомлений.

📑 1. Добавление логгинга для каждой задачи

По умолчанию cron не сохраняет вывод задач. Легко потерять сообщения об ошибках. Добавьте явное перенаправление вывода:

* * * * * /path/to/script.sh >> /var/log/mycron.log 2>&1

ℹ️ Пояснение:

  • >> — добавляет стандартный вывод (stdout) в лог.
  • 2>&1 — перенаправляет ошибки (stderr) в тот же лог.

Теперь у вас будет централизованный лог для каждой задачи.

📂 2. Использование глобального логгинга через rsyslog

Если вы хотите автоматически собирать логи всех cron-задач в одном месте, настройте rsyslog:

  • Проверьте, что включен логгинг для cron в /etc/rsyslog.d/50-default.conf:
cron.*    /var/log/cron.log
  • Перезапустите службу:
sudo service rsyslog restart

ℹ️ Теперь все задачи, запущенные через cron, будут логироваться в /var/log/cron.log.

‼️ 3. Автоматические уведомления о сбоях

Чтобы получать уведомления о неудачах, добавьте проверку на статус завершения ($?):

* * * * * /path/to/script.sh || echo "Task failed: $(date)" | mail -s "Cron Error" you@example.com

❕ Если скрипт завершится с ошибкой, будет отправлено письмо.

Совет: Вместо mail можно использовать Slack, Telegram или другие API. Например, через curl:

* * * * * /path/to/script.sh || curl -X POST -H 'Content-type: application/json' --data '{"text":"Cron task failed!"}' https://hooks.slack.com/services/your/webhook/url

➡️ 4. Тестирование cron перед запуском

Вместо того чтобы вручную ждать выполнения задачи, используйте run-parts для теста:

run-parts --test /etc/cron.daily

❔ Это покажет список задач, которые будут выполнены.

📊 5. Добавление метрик для мониторинга через Prometheus

Если вы используете Prometheus, интегрируйте его в cron для мониторинга задач:

  • Создайте экспортера, который будет записывать статус задачи в файл:
echo "cron_task_status{task_name=\"mytask\"} 1" > /var/lib/node_exporter/cron_metrics.prom
  • Настройте cron-задачу на запись метрик:
* * * * * /path/to/script.sh && echo "cron_task_status{task_name=\"mytask\"} 1" > /var/lib/node_exporter/cron_metrics.prom || echo "cron_task_status{task_name=\"mytask\"} 0" > /var/lib/node_exporter/cron_metrics.prom

❔ Теперь статус задач будет виден в Grafana/Prometheus.

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

tags: #полезно #мониторинг #cron

🧭 @recura_tech

Скриншот тёмного терминала с примерами команд для cron: перенаправление вывода, уведомления (mail, curl), фрагменты кода для логгинга.
Терминал с примерами команд для логирования и уведомлений cron.

Читайте так же