🥰Systemd, drop-in файлы

Продолжаем разбираться с systemd. В прошлый раз мы научились запускать сервисы и смотреть логи. Сегодня - про то, как безопасно вносить изменения в чужие конфиги (системные или из пакетов) и не потерять их при обновлении.

➡️Какой нюанс у нас на руках - это править системные юниты = плохая идея Вы поставили, например, Zabbix агент из штатного репозитория. Его юнит лежит в /lib/systemd/system/.

  1. Если вы отредактируете его напрямую, то - при следующем обновлении пакета все ваши правки сотрутся.
  2. Вы не получите новые зависимости или фиксы, которые разработчики добавили в свежий юнит. Как вариант, можно скопировать юнит в /etc/systemd/system/ и править там - тогда пакетные обновления его не тронут. НО!!! Тогда вы берёте полную ответственность за его поддержку и пропускаете улучшения от разработчиков.

💫Решение, как вариант событий - "drop-in файлы" Drop-in файлы - это маленькие конфиги, которые дополняют или переопределяют настройки основного юнита. Они лежат в папке /etc/systemd/system/<имя_юнита>.service.d/ и имеют расширение .conf.

Как это работает:

  1. Основной юнит остаётся нетронутым (в /lib/systemd/system/).
  2. Ваши изменения - в отдельной папке в /etc/systemd/system/.
  3. При запуске systemd склеивает основной юнит + все .conf из drop-in папки.

Плюсы:

  • Обновления пакета не затирают ваши правки.
  • Вы всегда видите, какие именно изменения сделали (всё в одном месте).
  • Легко откатить, просто удалите или переименуйте drop-in файл.

💫 Удобный способ пользования - "systemctl edit" Вместо ручного создания папок и файлов можно использовать встроенную команду: sudo systemctl edit zabbix-agent Что вообще делает эта команда?

  1. Создаёт drop-in файл автоматически по пути /etc/systemd/system/zabbix-agent.service.d/override.conf
  2. Открывает редактор (обычно nano или vi)
  3. После сохранения автоматически перегружает конфигурацию (вызывать daemon-reload не нужно)

Если же нужно отредактировать весь юнит целиком: sudo systemctl edit --full zabbix-agent Тогда systemd скопирует юнит из /lib/systemd/system/ в /etc/systemd/system/ и откроет его для полного редактирования. Но, это уже не будет считаться drop-in файлом, а обходом (оверрайд, по модному)

🏵 Полезные команды для диагностики

#Посмотреть, какие drop-in файлы использует юнит

systemctl show nginx -p DropInPaths

#Посмотреть итоговый юнит

systemctl cat nginx

#Посмотреть изменения в реальном времени

sudo systemctl daemon-reload sudo systemctl status nginx ⭕️Как итог Drop-in файлы - это инструмент для аккуратного администрирования:

  1. Не трогаете системные юниты
  2. Изменения не слетают при обновлении пакетов
  3. Все кастомные правки собраны в одном месте
  4. Легко откатить (удалил файл - и всё снова работает по умолчанию) Используйтеsystemctl edit - это самый простой и правильный путь.