Comment désactiver un service sans utiliser 'systemctl disable'


12

Il y a un service que je veux exécuter uniquement lorsqu'un autre service échoue ( [Unit] OnFailure=foo), mais je ne veux pas que ce service ( foo) démarre automatiquement au démarrage. Une option est en cours d'exécution systemctl disable foo, mais je cherche une autre façon.

Contexte: Je crée une image de système d'exploitation et je ne veux pas avoir à démarrer la machine, exécuter cette commande ( systemctl disable foo), puis l'arrêter avant de déclarer mon image finale.

Réponses:


4

Tous les services sont "désactivés" par défaut; "activation" est opt-in.

Si foo.servicec'est votre service personnalisé, il ne sera démarré que s'il est explicitement tiré par quelque chose (comme la OnFailure=directive), et vous ne devez rien "désactiver".


Donc, fondamentalement, vous "obtenez cette fonctionnalité gratuitement" à moins que foo n'ait été activé précédemment?
rogerdpack

26

systemctl enablefonctionne en manipulant des liens symboliques dans /etc/systemd/system/(pour les démons système). Lorsque vous êtes enableun service, il examine les WantedBylignes de la [Install]section et affiche les liens symboliques dans ces .wantsrépertoires.

systemctl disable fait le contraire.

Vous pouvez simplement supprimer ces liens symboliques - faire cela à la main équivaut à utiliser systemctl disable.


Ce serait un service qui n'a pas encore été exécuté par systemd (c'est personnalisé), donc il n'y aurait aucun de ces liens symboliques supplémentaires. Je suppose que ceux-ci seraient créés au premier démarrage?
tshepang

3
@Tshepang, il ne devrait pas être activé à moins que vous ne l'activiez manuellement (ou dans un script, bien sûr)
derobert

1
Oh, j'ai supposé qu'il serait activé automatiquement (ce à quoi je m'attendais en installant les paquets Debian). Bon à savoir.
tshepang

3
@Tshepang qui est le script postinst du package faisant une activation. Ou je suppose que l'envoi des liens symboliques dans le colis, je ne sais pas s'ils le font.
derobert

4

Vous pouvez utiliser systemctl start ServiceName.serviceet systemctl stop Service.Name.servicepour démarrer et arrêter un service respectivement. Contrairement à systemctl enable ...et systemctl disable ..., les commandes de démarrage et d'arrêt ne durent que pour la session en cours. Par conséquent, lorsque vous redémarrez la machine, les modifications ne sont pas enregistrées.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.