ℹ️ Когда в системе запускается много 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



