Какие скрипты на Bash вы писали для автоматизации?

«Какие скрипты на Bash вы писали для автоматизации?» — вопрос из категории Скриптинг и автоматизация, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я писал Bash-скрипты для автоматизации рутинных операционных задач, что является основой для построения более сложных CI/CD-пайплайнов.

1. Скрипты для мониторинга и алертинга:

  • Мониторинг логов на предмет ошибок: Скрипт, который парсит логи приложения и отправляет алерт в Slack/Telegram, если обнаруживается критическая ошибка или паттерн, указывающий на сбой.
    #!/bin/bash
    LOG_FILE="/var/log/myapp/app.log"
    ERROR_PATTERN="CRITICAL|OutOfMemoryError"
    if tail -n 100 "$LOG_FILE" | grep -q "$ERROR_PATTERN"; then
        MESSAGE="$(hostname): Critical error found in $LOG_FILE"
        # Отправка в Slack через webhook
        curl -X POST -H 'Content-type: application/json' 
             --data "{"text":"$MESSAGE"}" 
             "$SLACK_WEBHOOK_URL"
    fi

2. Скрипты для управления резервными копиями:

  • Инкрементный бэкап с ротацией и проверкой целостности: Скрипт, который создает timestamp-архив данных, проверяет его с помощью tar -tf, копирует на удаленный S3-бакет через AWS CLI или rsync-сервер, и удаляет архивы старше N дней.

    #!/bin/bash
    BACKUP_DIR="/backups"
    SOURCE_DIR="/data"
    S3_BUCKET="s3://my-backups"
    TIMESTAMP=$(date +%Y%m%d_%H%M%S)
    ARCHIVE_NAME="backup_$TIMESTAMP.tar.gz"
    
    tar -czf "$BACKUP_DIR/$ARCHIVE_NAME" "$SOURCE_DIR" && 
    aws s3 cp "$BACKUP_DIR/$ARCHIVE_NAME" "$S3_BUCKET/" && 
    find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +7 -delete

3. Скрипты для деплоя и обслуживания:

  • Graceful-рестарт приложения с проверкой здоровья: Скрипт, который останавливает приложение, обновляет код из Git, устанавливает зависимости и запускает его с последующей проверкой, что оно отвечает на health-check эндпоинт.
  • Сбор и агрегация системных метрик: Скрипт, который с помощью vmstat, iostat, df собирает ключевые метрики (CPU, memory, disk I/O, space) и записывает их в формате, пригодном для ingestion в Prometheus (например, в файл, который читает node_exporter).

Общие принципы: Все скрипты включали обработку ошибок (set -euo pipefail), логирование действий, валидацию входных параметров и конфигурацию через переменные окружения или конфигурационные файлы для удобства поддержки.