декабря 21, 2025
16 мин. чтения

Вопросы и ответы для собеседования Junior DevOps Engineer

interview
career-advice
job-search
entry-level
Вопросы и ответы для собеседования Junior DevOps Engineer
Milad Bonakdar

Milad Bonakdar

Автор

Подготовьтесь с практическими вопросами по Linux troubleshooting, Git, CI/CD, Docker, облаку, Terraform, мониторингу, Kubernetes и Bash.


Краткий вывод

На собеседовании Junior DevOps обычно проверяют, умеете ли вы спокойно разбирать инциденты, объяснять поток доставки ПО и безопасно работать с инструментами, близкими к production. Ожидайте вопросы по Linux-сервисам и логам, Git, CI/CD, Docker, облакам, Terraform, мониторингу, Kubernetes, управлению конфигурацией и Bash.

Используйте это руководство, чтобы тренировать не только ответы, но и ход мыслей: что проверить первым, какие логи открыть, когда откатываться и когда просить больше контекста.


Основы Linux

1. Объясните, какие общие команды Linux вы используете ежедневно в качестве DevOps инженера.

Ответ: Основные команды Linux для работы DevOps:

# Операции с файлами
ls -la                    # Список файлов с деталями
cd /var/log              # Смена директории
cat /etc/hosts           # Отображение содержимого файла
tail -f /var/log/app.log # Отслеживание файла логов в реальном времени
grep "error" app.log     # Поиск шаблонов

# Управление процессами
ps aux | grep nginx      # Список процессов
top                      # Мониторинг системных ресурсов
kill -9 1234            # Принудительное завершение процесса
systemctl status nginx   # Проверка статуса сервиса
systemctl restart nginx  # Перезапуск сервиса

# Права доступа к файлам
chmod 755 script.sh      # Изменение прав доступа к файлу
chown user:group file    # Изменение владельца
ls -l                    # Просмотр прав доступа

# Использование диска
df -h                    # Использование дискового пространства
du -sh /var/log          # Размер директории
free -h                  # Использование памяти

# Сеть
netstat -tulpn           # Показать прослушиваемые порты
curl https://api.com     # Выполнить HTTP запрос
ping google.com          # Проверка соединения
ssh user@server          # Удаленный вход

Распространенность: Очень часто
Сложность: Легко


2. Как вы устраняете проблему, когда служба не запускается в Linux?

Ответ: Систематический подход к устранению неполадок:

# 1. Проверить статус службы
systemctl status nginx
# Поиск сообщений об ошибках

# 2. Проверить логи
journalctl -u nginx -n 50
# или
tail -f /var/log/nginx/error.log

# 3. Проверить синтаксис конфигурации
nginx -t

# 4. Проверить, используется ли порт
netstat -tulpn | grep :80
# или
lsof -i :80

# 5. Проверить права доступа к файлам
ls -l /etc/nginx/nginx.conf
ls -ld /var/log/nginx

# 6. Проверить дисковое пространство
df -h

# 7. Попробовать запустить вручную для получения более подробной информации
nginx -g 'daemon off;'

# 8. Проверить SELinux/AppArmor (если включены)
getenforce
ausearch -m avc -ts recent

Общие проблемы:

  • Ошибки синтаксиса конфигурации
  • Порт уже используется
  • Отказ в доступе
  • Отсутствующие зависимости
  • Недостаточно места на диске

Распространенность: Очень часто
Сложность: Средне


Контроль версий с помощью Git

3. Объясните основной рабочий процесс Git и общие команды.

Ответ: Рабочий процесс Git для ежедневных задач DevOps:

# Инициализация репозитория
git init
git clone https://github.com/user/repo.git

# Проверить статус
git status
git log --oneline

# Базовый рабочий процесс
git add .                    # Добавить изменения в индекс
git commit -m "Add feature"  # Зафиксировать изменения
git push origin main         # Отправить в удаленный репозиторий

# Ветвление
git branch feature-x         # Создать ветку
git checkout feature-x       # Переключиться на ветку
git checkout -b feature-y    # Создать и переключиться

# Слияние
git checkout main
git merge feature-x

# Получить последние изменения
git pull origin main

# Отмена изменений
git reset --hard HEAD        # Отменить локальные изменения
git revert abc123           # Отменить конкретный коммит

# Сохранение изменений
git stash                    # Временно сохранить изменения
git stash pop               # Восстановить сохраненные изменения

# Просмотр различий
git diff                     # Неиндексированные изменения
git diff --staged           # Индексированные изменения

Лучшие практики:

  • Пишите понятные сообщения к коммитам
  • Часто коммитьте, регулярно отправляйте
  • Используйте ветки для разработки
  • Получайте обновления перед отправкой
  • Проверяйте изменения перед коммитом

Распространенность: Очень часто
Сложность: Легко


4. Как вы разрешаете конфликт слияния в Git?

Ответ: Пошаговое разрешение конфликта:

# 1. Попытка слияния
git merge feature-branch
# Автоматическое слияние file.txt
# КОНФЛИКТ (содержимое): Конфликт слияния в file.txt

# 2. Проверить конфликтные файлы
git status
# Необъединенные пути:
#   оба изменены:   file.txt

# 3. Открыть конфликтный файл
cat file.txt
# <<<<<<< HEAD
# Содержимое текущей ветки
# =======
# Содержимое входящей ветки
# >>>>>>> feature-branch

# 4. Отредактировать файл для разрешения конфликта
# Удалить маркеры конфликтов и сохранить нужные изменения

# 5. Добавить разрешенный файл в индекс
git add file.txt

# 6. Завершить слияние
git commit -m "Resolve merge conflict"

# Альтернатива: Отмена слияния
git merge --abort

Маркеры конфликтов:

  • <<<<<<< HEAD - Ваша текущая ветка
  • ======= - Разделитель
  • >>>>>>> branch-name - Входящие изменения

Распространенность: Часто
Сложность: Легко-Средне


Основы CI/CD

5. Что такое CI/CD и почему это важно?

Ответ: CI/CD расшифровывается как Continuous Integration и Continuous Deployment/Delivery (Непрерывная интеграция и Непрерывное развертывание/доставка).

Continuous Integration (CI):

  • Автоматическая сборка и тестирование кода при каждом коммите
  • Обнаружение ошибок на ранней стадии
  • Обеспечение правильной интеграции кода

Continuous Deployment (CD):

  • Автоматическое развертывание в production после успешного прохождения тестов
  • Более быстрые циклы выпуска
  • Уменьшение количества ручных ошибок
Loading diagram...

Преимущества:

  • Более быстрые циклы обратной связи
  • Уменьшение проблем с интеграцией
  • Автоматизированное тестирование
  • Последовательные развертывания
  • Более быстрое время выхода на рынок

Распространенность: Очень часто
Сложность: Легко


6. Объясните базовый CI/CD пайплайн с использованием GitHub Actions.

Ответ: Пример рабочего процесса GitHub Actions:

# .github/workflows/ci-cd.yml
name: CI/CD Pipeline

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
    
    - name: Setup Node.js
      uses: actions/setup-node@v4
      with:
        node-version: '20'
    
    - name: Install dependencies
      run: npm ci
    
    - name: Run tests
      run: npm test
    
    - name: Build application
      run: npm run build
    
    - name: Run linter
      run: npm run lint

  deploy:
    needs: build-and-test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    
    steps:
    - name: Deploy to production
      run: |
        echo "Deploying to production..."
        # Добавьте команды развертывания сюда

Основные концепции:

  • Триггеры: Когда запускается пайплайн (push, PR, по расписанию)
  • Jobs: Независимые задачи, которые могут выполняться параллельно
  • Steps: Отдельные команды в рамках задания
  • Artifacts: Файлы, передаваемые между заданиями

Распространенность: Очень часто
Сложность: Средне


Docker и контейнеризация

7. Что такое Docker и зачем мы используем контейнеры?

Ответ: Docker — это платформа для разработки, доставки и запуска приложений в контейнерах.

Контейнеры vs Виртуальные машины:

  • Контейнеры используют ядро ОС хоста (легкие)
  • Виртуальные машины включают полную ОС (тяжелые)
  • Контейнеры запускаются за секунды
  • Лучшее использование ресурсов

Преимущества:

  • Согласованность: Одинаковая среда везде
  • Изоляция: Приложения не мешают друг другу
  • Переносимость: Запуск где угодно
  • Эффективность: Легкие и быстрые
# Пример Dockerfile
FROM node:18-alpine

WORKDIR /app

COPY package*.json ./
RUN npm ci --only=production

COPY . .

EXPOSE 3000

CMD ["node", "server.js"]

Распространенность: Очень часто
Сложность: Легко


8. Объясните общие команды Docker.

Ответ: Основные команды Docker:

# Образы
docker pull nginx:latest          # Скачать образ
docker images                     # Список образов
docker rmi nginx:latest          # Удалить образ
docker build -t myapp:1.0 .      # Собрать образ

# Контейнеры
docker run -d -p 80:80 nginx     # Запустить контейнер
docker ps                         # Список запущенных контейнеров
docker ps -a                      # Список всех контейнеров
docker stop container_id          # Остановить контейнер
docker start container_id         # Запустить контейнер
docker restart container_id       # Перезапустить контейнер
docker rm container_id            # Удалить контейнер

# Логи и отладка
docker logs container_id          # Просмотр логов
docker logs -f container_id       # Отслеживание логов
docker exec -it container_id bash # Войти в контейнер
docker inspect container_id       # Подробная информация

# Очистка
docker system prune              # Удалить неиспользуемые данные
docker volume prune              # Удалить неиспользуемые тома

# Docker Compose
docker compose up -d             # Запустить сервисы
docker compose down              # Остановить сервисы
docker compose logs -f           # Просмотр логов

Распространенность: Очень часто
Сложность: Легко


9. Напишите файл Docker Compose для веб-приложения с базой данных.

Ответ: Пример многоконтейнерного приложения:

version: '3.8'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_HOST=db
      - DB_PORT=5432
      - DB_NAME=myapp
    depends_on:
      - db
    volumes:
      - ./logs:/app/logs
    restart: unless-stopped

  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_DB=myapp
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=secret
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    restart: unless-stopped

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    restart: unless-stopped

volumes:
  postgres_data:

Основные концепции:

  • services: Определить контейнеры
  • depends_on: Зависимости сервисов
  • volumes: Постоянное хранилище данных
  • environment: Переменные окружения
  • ports: Отображение портов
  • restart: Политика перезапуска

Распространенность: Часто
Сложность: Средне


Основы Cloud

10. Объясните разницу между IaaS, PaaS и SaaS.

Ответ: Модели облачных сервисов:

IaaS (Infrastructure as a Service):

  • Предоставляет: Виртуальные машины, хранилище, сети
  • Вы управляете: ОС, средой выполнения, приложениями
  • Примеры: AWS EC2, Azure VMs, Google Compute Engine
  • Вариант использования: Полный контроль над инфраструктурой

PaaS (Platform as a Service):

  • Предоставляет: Среду выполнения, базы данных, промежуточное ПО
  • Вы управляете: Приложениями и данными
  • Примеры: AWS Elastic Beanstalk, Heroku, Google App Engine
  • Вариант использования: Сосредоточьтесь на коде, а не на инфраструктуре

SaaS (Software as a Service):

  • Предоставляет: Готовые приложения
  • Вы управляете: Данными пользователей и настройками
  • Примеры: Gmail, Salesforce, Office 365
  • Вариант использования: Готовые к использованию приложения
Loading diagram...

Распространенность: Часто
Сложность: Легко


11. Какие базовые сервисы AWS должен знать DevOps инженер?

Ответ: Основные сервисы AWS:

Вычислительные ресурсы:

  • EC2: Виртуальные серверы
  • Lambda: Бессерверные функции
  • ECS/EKS: Оркестрация контейнеров

Хранилище:

  • S3: Объектное хранилище
  • EBS: Блочное хранилище для EC2
  • EFS: Общее файловое хранилище

Сеть:

  • VPC: Виртуальное частное облако
  • Route 53: DNS сервис
  • CloudFront: CDN
  • ELB: Балансировка нагрузки

База данных:

  • RDS: Управляемые реляционные базы данных
  • DynamoDB: NoSQL база данных

Инструменты DevOps:

  • CodePipeline: CI/CD сервис
  • CodeBuild: Сервис сборки
  • CloudWatch: Мониторинг и логирование
  • IAM: Управление доступом

Пример: Запуск экземпляра EC2 с помощью AWS CLI:

aws ec2 run-instances \
  --image-id ami-0abcdef1234567890 \
  --instance-type t2.micro \
  --key-name my-key-pair \
  --security-group-ids sg-0123456789abcdef0 \
  --subnet-id subnet-0123456789abcdef0 \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=WebServer}]'

Распространенность: Очень часто
Сложность: Средне


Инфраструктура как код

12. Что такое Infrastructure as Code (IaC) и почему это важно?

Ответ: IaC — это управление инфраструктурой с помощью кода, а не ручных процессов.

Преимущества:

  • Контроль версий: Отслеживание изменений инфраструктуры
  • Воспроизводимость: Создание идентичных сред
  • Автоматизация: Уменьшение количества ручных ошибок
  • Документация: Код служит документацией
  • Согласованность: Одинаковая конфигурация везде

Популярные инструменты IaC:

  • Terraform: Мультиоблачное развертывание
  • Ansible: Управление конфигурацией
  • CloudFormation: Специфично для AWS
  • Pulumi: IaC на основе кода

Пример Terraform:

# main.tf
provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  tags = {
    Name = "WebServer"
    Environment = "Production"
  }
}

resource "aws_security_group" "web_sg" {
  name        = "web-sg"
  description = "Allow HTTP traffic"

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

Распространенность: Очень часто
Сложность: Средне


13. Объясните базовый рабочий процесс Terraform.

Ответ: Этапы рабочего процесса Terraform:

# 1. Инициализация Terraform
terraform init
# Загружает провайдеров и модули

# 2. Форматировать код
terraform fmt
# Форматирует .tf файлы

# 3. Проверить конфигурацию
terraform validate
# Проверяет синтаксис

# 4. Планировать изменения
terraform plan
# Показывает, что будет создано/изменено/удалено

# 5. Применить изменения
terraform apply
# Создает/обновляет инфраструктуру
# Запрашивает подтверждение

# 6. Просмотреть состояние
terraform show
# Показывает текущее состояние

# 7. Уничтожить инфраструктуру
terraform destroy
# Удаляет все ресурсы

Структура файлов Terraform:

project/
├── main.tf          # Основная конфигурация
├── variables.tf     # Входные переменные
├── outputs.tf       # Выходные значения
├── terraform.tfvars # Значения переменных
└── .terraform/      # Плагины провайдеров

Пример переменных:

# variables.tf
variable "instance_type" {
  description = "EC2 instance type"
  type        = string
  default     = "t2.micro"
}

variable "environment" {
  description = "Environment name"
  type        = string
}

# terraform.tfvars
environment = "production"
instance_type = "t2.small"

Распространенность: Часто
Сложность: Средне


Мониторинг и логирование

14. Какие метрики вы бы отслеживали для веб-приложения?

Ответ: Ключевые метрики мониторинга:

Метрики приложения:

  • Время ответа / задержка
  • Частота запросов (запросов в секунду)
  • Частота ошибок (4xx, 5xx ошибки)
  • Пропускная способность

Системные метрики:

  • Использование ЦП
  • Использование памяти
  • Дисковый ввод-вывод
  • Сетевой ввод-вывод

Метрики инфраструктуры:

  • Статус контейнера/пода
  • Доступность сервиса
  • Здоровье балансировщика нагрузки

Пример запроса Prometheus:

# Среднее время ответа
rate(http_request_duration_seconds_sum[5m])
/ rate(http_request_duration_seconds_count[5m])

# Частота ошибок
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m]))

# Использование ЦП
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

Пороговые значения оповещений:

  • Время ответа > 500 мс
  • Частота ошибок > 1%
  • Использование ЦП > 80%
  • Использование памяти > 85%
  • Использование диска > 90%

Распространенность: Часто
Сложность: Средне


15. Как вы централизуете логи с нескольких серверов?

Ответ: Архитектура централизованного логирования:

Loading diagram...

Общий стек (ELK):

  • Elasticsearch: Хранение и индексация логов
  • Logstash/Fluentd: Сбор и обработка логов
  • Kibana: Визуализация и поиск логов

Пример конфигурации Filebeat:

# filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/app/*.log
  fields:
    app: myapp
    environment: production

output.elasticsearch:
  hosts: ["elasticsearch:9200"]
  index: "app-logs-%{+yyyy.MM.dd}"

processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

Лучшие практики:

  • Использовать структурированное логирование (JSON)
  • Включать идентификаторы корреляции
  • Устанавливать политики хранения
  • Индексировать стратегически
  • Мониторить объем логов

Распространенность: Часто
Сложность: Средне


Основы Kubernetes

16. Что такое Kubernetes и каковы его основные компоненты?

Ответ: Kubernetes — это платформа оркестрации контейнеров, которая автоматизирует развертывание, масштабирование и управление контейнеризированными приложениями.

Основные компоненты:

Control Plane:

  • API Server: Точка входа для всех команд
  • etcd: Хранилище ключей-значений для данных кластера
  • Scheduler: Назначает поды узлам
  • Controller Manager: Поддерживает желаемое состояние

Worker Nodes:

  • kubelet: Управляет подами на узле
  • kube-proxy: Сетевая маршрутизация
  • Container Runtime: Запускает контейнеры через CRI runtime, например containerd или CRI-O
Loading diagram...

Основные объекты Kubernetes:

1. Pod:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80

2. Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80

3. Service:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: LoadBalancer

Общие команды kubectl:

# Получить ресурсы
kubectl get pods
kubectl get deployments
kubectl get services

# Описать ресурс
kubectl describe pod nginx-pod

# Создать из файла
kubectl apply -f deployment.yaml

# Удалить ресурс
kubectl delete pod nginx-pod

# Просмотреть логи
kubectl logs nginx-pod

# Выполнить команду в поде
kubectl exec -it nginx-pod -- /bin/bash

# Перенаправление портов
kubectl port-forward pod/nginx-pod 8080:80

Распространенность: Очень часто
Сложность: Легко


Управление конфигурацией

17. Объясните основы Ansible и напишите простой плейбук.

Ответ: Ansible — это инструмент управления конфигурацией без агентов, который использует SSH для настройки серверов.

Основные концепции:

  • Inventory: Список серверов для управления
  • Playbook: YAML файл, определяющий задачи
  • Modules: Многократно используемые единицы работы
  • Roles: Организованный набор задач

Файл Inventory:

# inventory.ini
[webservers]
web1.example.com
web2.example.com

[databases]
db1.example.com

[all: vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_rsa

Простой плейбук:

# playbook.yml
---
- name: Setup Web Servers
  hosts: webservers
  become: yes
  
  vars:
    app_port: 8080
    app_user: webapp
  
  tasks:
    - name: Update apt cache
      apt:
        update_cache: yes
        cache_valid_time: 3600
    
    - name: Install required packages
      apt:
        name:
          - nginx
          - python3
          - git
        state: present
    
    - name: Create application user
      user:
        name: "{{ app_user }}"
        shell: /bin/bash
        create_home: yes
    
    - name: Copy nginx configuration
      template:
        src: templates/nginx.conf.j2
        dest: /etc/nginx/sites-available/default
      notify: Restart nginx
    
    - name: Ensure nginx is running
      service:
        name: nginx
        state: started
        enabled: yes
    
    - name: Deploy application
      git:
        repo: https://github.com/example/app.git
        dest: /var/www/app
        version: main
      become_user: "{{ app_user }}"
  
  handlers:
    - name: Restart nginx
      service:
        name: nginx
        state: restarted

Пример шаблона:

# templates/nginx.conf.j2
server {
    listen {{ app_port }};
    server_name {{ ansible_hostname }};
    
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Запуск плейбуков:

# Проверить синтаксис
ansible-playbook playbook.yml --syntax-check

# Сухой прогон (режим проверки)
ansible-playbook playbook.yml --check

# Запустить плейбук
ansible-playbook -i inventory.ini playbook.yml

# Запустить с определенными тегами
ansible-playbook playbook.yml --tags "deploy"

# Ограничить определенными хостами
ansible-playbook playbook.yml --limit webservers

Структура ролей Ansible:

roles/
└── webserver/
    ├── tasks/
    │   └── main.yml
    ├── handlers/
    │   └── main.yml
    ├── templates/
    │   └── nginx.conf.j2
    ├── files/
    ├── vars/
    │   └── main.yml
    └── defaults/
        └── main.yml

Использование ролей:

---
- name: Setup Infrastructure
  hosts: all
  become: yes
  
  roles:
    - common
    - webserver
    - monitoring

Ad-hoc команды:

# Пинговать все хосты
ansible all -i inventory.ini -m ping

# Запустить команду на всех хостах
ansible all -i inventory.ini -a "uptime"

# Установить пакет
ansible webservers -i inventory.ini -m apt -a "name=nginx state=present" --become

# Скопировать файл
ansible all -i inventory.ini -m copy -a "src=/local/file dest=/remote/file"

# Перезапустить сервис
ansible webservers -i inventory.ini -m service -a "name=nginx state=restarted" --become

Распространенность: Часто
Сложность: Средне


Скриптинг и автоматизация

18. Напишите bash скрипт для автоматизации общей задачи DevOps.

Ответ: Bash скриптинг необходим для автоматизации в DevOps.

Пример 1: Скрипт резервного копирования

#!/bin/bash

# Скрипт резервного копирования базы данных с ротацией
set -e  # Выход при ошибке
set -u  # Выход при неопределенной переменной

# Конфигурация
DB_NAME="myapp"
DB_USER="backup_user"
BACKUP_DIR="/var/backups/mysql"
RETENTION_DAYS=7
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${DATE}.sql.gz"
LOG_FILE="/var/log/mysql_backup.log"

# Функция для логирования сообщений
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# Функция для отправки уведомления
send_notification() {
    local status=$1
    local message=$2
    
    # Отправить в Slack
    curl -X POST -H 'Content-type: application/json' \
        --data "{\"text\":\"Backup ${status}: ${message}\"}" \
        "$SLACK_WEBHOOK_URL"
}

# Создать директорию для резервных копий, если ее не существует
mkdir -p "$BACKUP_DIR"

# Начать резервное копирование
log "Starting backup of database: $DB_NAME"

# Выполнить резервное копирование
if mysqldump -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" | gzip > "$BACKUP_FILE"; then
    log "Backup completed successfully: $BACKUP_FILE"
    
    # Получить размер файла
    SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
    log "Backup size: $SIZE"
    
    # Удалить старые резервные копии
    log "Removing backups older than $RETENTION_DAYS days"
    find "$BACKUP_DIR" -name "${DB_NAME}_*.sql.gz" -mtime +$RETENTION_DAYS -delete
    
    # Загрузить в S3 (необязательно)
    if command -v aws &> /dev/null; then
        log "Uploading backup to S3"
        aws s3 cp "$BACKUP_FILE" "s3://my-backups/mysql/" --storage-class GLACIER
    fi
    
    send_notification "SUCCESS" "Database $DB_NAME backed up successfully ($SIZE)"
else
    log "ERROR: Backup failed"
    send_notification "FAILED" "Database $DB_NAME backup failed"
    exit 1
fi

log "Backup process completed"

Пример 2: Скрипт проверки работоспособности

#!/bin/bash

# Скрипт проверки работоспособности сервиса
SERVICES=("nginx" "mysql" "redis")
ENDPOINTS=("http://localhost:80" "http://localhost:8080/health")
ALERT_EMAIL="[email protected]"

check_service() {
    local service=$1
    
    if systemctl is-active --quiet "$service"; then
        echo "✓ $service is running"
        return 0
    else
        echo "✗ $service is NOT running"
        return 1
    fi
}

check_endpoint() {
    local url=$1
    local response=$(curl -s -o /dev/null -w "%{http_code}" "$url")
    
    if [ "$response" -eq 200 ]; then
        echo "✓ $url is healthy (HTTP $response)"
        return 0
    else

На собеседовании можно показать более короткий скрипт, если вы объясняете обработку ошибок, exit codes, логирование и безопасную проверку автоматизации.

Распространенность: Очень часто
Сложность: Средне


Заключение

Подготовьте небольшой end-to-end проект: Git-репозиторий, тесты, CI workflow, Dockerfile, простой деплой и несколько логов или метрик. Для junior-позиции важнее показать аккуратный подход к диагностике, чем перечислить команды без контекста.

Newsletter subscription

Еженедельные советы по карьере, которые действительно работают

Получайте последние идеи прямо на вашу почту

Перестаньте откликаться. Начните получать предложения.

Превратите своё резюме в магнит для собеседований с оптимизацией на базе ИИ, которой доверяют соискатели по всему миру.

Начать бесплатно

Поделиться этим постом

Используйте Свои 6 Секунд По Максимуму

Рекрутеры просматривают резюме в среднем всего 6-7 секунд. Наши проверенные шаблоны разработаны так, чтобы мгновенно привлекать внимание и заставлять продолжать чтение.