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-файлы больше не болят.
📬 Свяжитесь с нами
Хотите внедрить это в своем бизнесе? Пишите нам!
- 📧 Email: [email protected]
- 🌐 Сайт: 1it.pro
- 📝 Блог: blog.1it.pro
- ✈️ Telegram Global (EN): Admin_global
- ✈️ Telegram (RU): Admin