Покажу на примере службы Nginx, установленной из пакета в стандартном репозитории. По умолчанию служба автоматически не поднимется, если по какой-то причине завершится. Вот это и исправим, добавив принудительный автозапуск.
1️⃣ Раньше я шёл в
/etc/systemd/system/multi-user.target.wants, искал юнит nginx и смотрел, какие там установлены параметры. А можно сделать вот так:# systemctl cat nginx.serviceСодержимое юнита прилетит в консоль. Удобно, и никуда ходить не надо. Простая вещь, но узнал я о ней относительно недавно. Там сразу и путь видно, где лежит файл с настройками, если захочется его посмотреть напрямую.
2️⃣ Теперь добавляем изменение. Можно создать директорию
/etc/systemd/system/nginx.service.d и туда положить конфигурацию override.conf с перекрывающими или дополнительными параметрами. Так давно не делаю, потому что помню команду:# systemctl edit nginx.serviceОткрывается текстовый редактор по умолчанию. Вносим изменение:
[Service]Restart=alwaysRestartSec=5sСохраняем. Конфигурация автоматически применяется. Теперь если набрать:
# systemctl cat nginx.serviceТо мы увидим и исходную конфигурацию и файл
/etc/systemd/system/nginx.service.d/override.conf, который был создан автоматически после команды edit. Не зная про команду
cat, я каждый раз вручную проверял override.conf и исходный юнит. Просто не довелось о ней услышать или где-то увидеть.3️⃣ Расскажу про ещё один нюанс, который иногда забываю, потом разбираюсь, почему не работает, и вспоминаю, в чём проблема. Если добавляется новый параметр, то никаких нюансов нет, просто указываете его и всё. Если же параметры в
override.conf перекрывают такие же в основном юните, например ExecStart и некоторые другие, то значение нужно сначала обнулить, а потом записать новое значение. Например:ExecStart=ExecStart=/usr/sbin/nginx -g 'daemon off; master_process off;'Переписали параметры запуска, которые в основном юните выглядят так:
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'Обнулять надо не все параметры. Не помню точно, какие нужно, а какие нет. Точно знаю, что всё, что относится к Exec надо обнулять, переменные окружения, если хотите полностью все переопределить, пользователей, наверняка что-то ещё. Если какие-то добавленные изменения не работают, просто обнулите их перед переопределением.
Рекомендую не добавлять эту статью в закладки, а сразу попробовать то, что тут описано, если не знакомы с этими командами. Это реально удобно. Вряд ли кто-то специально проходит курсы по systemd или изучает все её команды. Зачастую всё знать не нужно, лишнее быстро забывается, в итоге только время тратишь. А такую мелочь где-то выхватишь, запомнишь и потом используешь. Я поэтому любою смотреть, как другие в терминале работают. Постоянно что-то новое узнаешь и обогащаешь свой опыт.
#systemd
