Как отключить сервис без использования systemctl disable

12

Есть служба, которую я хочу запустить только в случае сбоя другой службы ( [Unit] OnFailure=foo), но я не хочу, чтобы эта служба ( foo) запускалась автоматически при загрузке. Один вариант работает systemctl disable foo, но я ищу другой путь.

Предыстория: я создаю образ ОС, и я не хочу загружать машину, запустите эту команду ( systemctl disable foo), затем выключите его, прежде чем объявить мой образ окончательным.

tshepang
источник

Ответы:

4

Все сервисы по умолчанию «отключены»; «Включение» является обязательным.

Если foo.serviceэто ваш пользовательский сервис, то он не будет запущен, если он явно не был извлечен чем-то (например, OnFailure=директивой), и вы не должны ничего «отключать».

intelfx
источник
Таким образом, в основном вы «получаете эту функциональность бесплатно», если foo не был включен ранее?
rogerdpack
26

systemctl enableработает, управляя символическими ссылками в /etc/systemd/system/(для системных демонов). Когда вы enableработаете с сервисом, он просматривает WantedByстроки в [Install]разделе и помещает символические ссылки в эти .wantsкаталоги.

systemctl disable делает обратное.

Вы можете просто удалить эти символические ссылки - делать это вручную полностью эквивалентно использованию systemctl disable.

derobert
источник
Это был бы сервис, который еще не запускался systemd (это пользовательский режим), поэтому никаких дополнительных символических ссылок не было бы. Я предполагаю, что они будут созданы при первой загрузке?
Чепанг
3
@Tshepang это не должно быть включено, если вы не включите его вручную (или в сценарии, конечно)
derobert
1
О, я предполагал, что он будет включен автоматически (что я и ожидал, установив пакеты Debian). Хорошо знать.
Чепанг
3
@Tshepang - это скрипт postinst в пакете, который делает включение. Или я думаю, что отправка символических ссылок в пакете, не уверен, что они это делают.
Дероберт
4

Вы можете использовать systemctl start ServiceName.serviceи systemctl stop Service.Name.serviceдля запуска и остановки службы соответственно. В отличие от systemctl enable ...и systemctl disable ..., команды пуска и останова действуют только для текущего сеанса, поэтому при перезагрузке компьютера изменения не будут сохранены.

tshepang
источник