2 min read

Ansible для systemd: управление сервисами и таймерами из одного плейбука

Ansible для systemd: управление сервисами и таймерами из одного плейбука

Вчера я потратил два часа, чтобы вручную поправить unit-файл на трёх серверах. Сегодня тот же сценарий выполняется за пять секунд. Разница — в одном Ansible-плейбуке.

Как это было

Очередная задача: настроить systemd-сервис для бэкапа логов. На каждом сервере нужно было: создать unit, указать ExecStart, включить сервис, потом добавить таймер, который запускает его каждый час. И так — на каждый хост.

Сначала я подключался по SSH, открывал файл в vim, правил. Потом systemctl daemon-reload, потом enable. На третьем сервере я случайно пропустил строчку с Wants. Всё пошло не по плану.

Проблема

Ручное управление unit-файлами — это источник постоянных ошибок. Забыл обновить параметр, не совпали версии конфигурации, таймер не включился.

Каждый пропущенный символ или лишний пробел — и сервис не стартует. А если серверов двадцать? Рутина превращается в ад.

Любая ручная операция, повторяющаяся более одного раза, должна быть автоматизирована. Иначе это не работа, а риск.

Почему это важно для бизнеса

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

  • 🐌 Снижение скорости релизов — каждый сервер требует индивидуальной настройки
  • 💸 Рост затрат на эксплуатацию — ручной труд не масштабируется
  • 🔴 Риск человеческой ошибки — одна опечатка ломает прод

Когда у вас 10+ серверов, ручное управление systemd становится узким горлышком. Это не devops, это героический админимнг.

Как я это решил

Я написал один плейбук Ansible. Внутри — модуль ansible.builtin.copy для шаблона unit-файла и module systemd для включения сервиса и таймера. Всё в одном файле.

Выглядит так: берём шаблон из Jinja2, кладём в /usr/lib/systemd/system/, запускаем daemon-reload, затем enable и start для сервиса, отдельно — enable и start для таймера. Готово.

Таймеры настраиваются через тот же подход: отдельный unit-файл с OnCalendar, потом такой же цикл enable + start. Никаких ручных танцев с systemctl.

Результат

Теперь на новый сервер конфигурация systemd уходит за три секунды. Я просто прогоняю плейбук, и всё: сервис работает, таймер тикает. Ошибки исчезли.

Свободное время я трачу на реальные задачи — архитектуру, оптимизацию, новые инструменты. А unit-файлы больше не болят.


📬 Свяжитесь с нами

Хотите внедрить это в своем бизнесе? Пишите нам!

Связаться с нами
Telegram
WhatsApp
Email