🥰Systemd, drop-in файлы
Продолжаем разбираться с systemd. В прошлый раз мы научились запускать сервисы и смотреть логи. Сегодня - про то, как безопасно вносить изменения в чужие конфиги (системные или из пакетов) и не потерять их при обновлении.
➡️Какой нюанс у нас на руках - это править системные юниты = плохая идея Вы поставили, например, Zabbix агент из штатного репозитория. Его юнит лежит в /lib/systemd/system/.
- Если вы отредактируете его напрямую, то - при следующем обновлении пакета все ваши правки сотрутся.
- Вы не получите новые зависимости или фиксы, которые разработчики добавили в свежий юнит. Как вариант, можно скопировать юнит в /etc/systemd/system/ и править там - тогда пакетные обновления его не тронут. НО!!! Тогда вы берёте полную ответственность за его поддержку и пропускаете улучшения от разработчиков.
💫Решение, как вариант событий - "drop-in файлы" Drop-in файлы - это маленькие конфиги, которые дополняют или переопределяют настройки основного юнита. Они лежат в папке /etc/systemd/system/<имя_юнита>.service.d/ и имеют расширение .conf.
Как это работает:
- Основной юнит остаётся нетронутым (в /lib/systemd/system/).
- Ваши изменения - в отдельной папке в /etc/systemd/system/.
- При запуске systemd склеивает основной юнит + все .conf из drop-in папки.
Плюсы:
- Обновления пакета не затирают ваши правки.
- Вы всегда видите, какие именно изменения сделали (всё в одном месте).
- Легко откатить, просто удалите или переименуйте drop-in файл.
💫 Удобный способ пользования - "systemctl edit" Вместо ручного создания папок и файлов можно использовать встроенную команду: sudo systemctl edit zabbix-agent Что вообще делает эта команда?
- Создаёт drop-in файл автоматически по пути /etc/systemd/system/zabbix-agent.service.d/override.conf
- Открывает редактор (обычно nano или vi)
- После сохранения автоматически перегружает конфигурацию (вызывать 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 файлы - это инструмент для аккуратного администрирования:
- Не трогаете системные юниты
- Изменения не слетают при обновлении пакетов
- Все кастомные правки собраны в одном месте
- Легко откатить (удалил файл - и всё снова работает по умолчанию) Используйтеsystemctl edit - это самый простой и правильный путь.