Bash: продолжать скрипт после ошибки и логировать

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

bashtrapлогирование

ℹ️ Обычно, если в Bash-скрипте одна из команд завершается с ошибкой, скрипт либо падает (set -e), либо продолжает работать, но без уведомлений. А что, если мы хотим, чтобы скрипт продолжал выполнение, но при этом логировал ошибки?

⚡️ Решение: используем trap для перехвата ошибок и логирования

Добавь это в свой скрипт:

#!/bin/bash
LOGFILE="error.log"

# Функция для логирования ошибок
error_handler() {
    echo "[ERROR] Команда \"$BASH_COMMAND\" завершилась с кодом $?" | tee -a "$LOGFILE"
}

# Перехватываем ошибки и вызываем обработчик
trap 'error_handler' ERR

# Пример команд (одна из них с ошибкой)
echo "Запускаем команды..."
ls /nonexistent_folder  # Ошибочная команда
echo "Команды продолжают выполняться!"

ℹ️ Как это работает?

  • trap 'error_handler' ERR — перехватывает все ошибки.
  • BASH_COMMAND — это последняя выполненная команда, которая вызвала ошибку.
  • Скрипт продолжает выполнение даже после ошибки, но все ошибки логируются в error.log.

🔥 Где это полезно?

  • В CI/CD пайплайнах, где важны логи ошибок, но скрипт не должен падать.
  • В автоматизированных задачах (бэкапы, мониторинг).
  • В сложных установочных скриптах.

tags: #логирование #bash #linux

🧭 @recura_tech

Скриншот окна терминала с фрагментом Bash‑скрипта: пример trap ERR, вывод ошибки и подсветка кода, демонстрирующие логирование в error.log.
Пример скрипта с trap ERR и логированием ошибок в error.log.

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