Перейти к содержимому

Уведомления об ошибках cron-задач и worker

Cron-задача или worker может отправлять в Депешер сообщение при ошибке, чтобы ответственный специалист увидел его в почте или мессенджере. Решение о том, что считать ошибкой и когда уведомлять, принимает ваш скрипт.

Настройте канал для ошибок

Сначала создайте и подтвердите исходящий канал для получателя. Затем создайте входящий канал, например «Ошибки фоновых задач», и свяжите каналы. Установите CLI от имени пользователя, который запускает задачу, и добавьте запись worker_errors с публичным адресом входящего канала в его конфиг.

Проверьте отправку под этим же пользователем:

bash
depesher -v worker_errors "Проверка уведомлений фоновой задачи"

Оберните команду задачи

Пример для Bash: сохраните скрипт как /home/user/jobs/run-import.sh и замените пути своей рабочей директорией, интерпретатором и CLI.

bash
#!/usr/bin/env bash

if (
  cd /home/user/jobs &&
    /usr/bin/python3 import.py
); then
  task_status=0
else
  task_status=$?

  if ! /home/user/.local/bin/depesher worker_errors \
    "Ошибка импорта на сервере данных. Код: $task_status. Проверьте журнал import.log"; then
    printf '%s\n' 'Не удалось отправить уведомление об ошибке импорта' >&2
  fi
fi

exit "$task_status"

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

Добавьте запуск в cron

Пример записи в пользовательском crontab для запуска каждый день в 03:00 по часовому поясу, используемому cron:

text
0 3 * * * /bin/bash /home/user/jobs/run-import.sh >> /home/user/jobs/import.log 2>&1

Каталоги должны существовать, а пользователь задачи — иметь право читать скрипт и писать журнал. Используйте абсолютные пути: окружение cron может отличаться от открытого терминала. CLI читает depesher.toml из системного каталога конфигурации пользователя запуска; точный путь можно узнать командой depesher --config-path. На Unix файлу нужны права 0600.

Как применить к постоянному worker

Для worker, который обрабатывает задания непрерывно, разместите отправку в обработчике ошибки отдельного задания. В уведомление добавьте идентификатор задания и тип сбоя. После отправки сохраняйте принятую в приложении обработку ошибки: повторную попытку, запись в журнал или завершение процесса.

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

Проверьте обнаружение ошибки

В тестовой копии замените команду задачи на false: должно прийти уведомление об ошибке. При true уведомления быть не должно. Запустите проверку от пользователя cron, а затем верните рабочую команду.

Этот способ сообщает о сбое выполненной команды. Если cron вообще не запустил задачу или процесс был принудительно остановлен до обработчика, сообщение не отправится. Проверка отсутствующих запусков требует отдельной логики контроля.

Другие проблемы с запросом и получателями описаны в диагностике доставки.