Désactiver un service à partir de tous les niveaux d'exécution?

61

J'ai un service fooqui commence actuellement au niveau d'exécution 3 et au-dessus. Comment puis-je arrêter de le faire, sans utiliser update-rc.d foo stop 3 ., qui (si je comprends bien) désactiverait le service à chaque changement de niveau d'exécution.

(c.-à-d., si j'étais au niveau d'exécution 1 et activé foo, alors lorsque je passerais au niveau d'exécution 3, il serait désactivé, non?)

Exécution de Debian GNU / Linux Lenny.

lfaraone
la source

Réponses:

57

Le terme "stop" n'empêche pas le démon de démarrer, mais le ferme plutôt lorsqu'il entre dans le niveau d'exécution spécifié.

Si vous souhaitez simplement supprimer un service / démon d'un seul niveau d'exécution, update-rc.dcomme indiqué par bei freiheit, ou supprimez simplement le lien symbolique de /etc/rcX.d/, où X correspond à votre niveau d'exécution. Si vous ne voulez pas que le service démarre automatiquement, update-rc.d -f foo removefera l'affaire.

PEra
la source
2
Des idées comment le faire sur Debian 8? sudo update-rc.d -f sunrpc removene marche pas; il est toujours présent après un redémarrage.
Debian 9 Cela ne fonctionnait pas pour moi, puis j'ai réalisé: oh derp, need sudo. update-rc.d ne donne aucun retour si vous oubliez de sudo. J'ai confirmé que les liens avaient disparuls /etc/rc*.d
Jason Dunkelberger
La commande a échoué sur Ubuntu16.04
Stephane
Assurez-vous que vous transmettez le nom de service correct, update-rc.d ne vous donne aucun commentaire s’il n’existe pas.
marcovtwout
Et si vous voulez le réactiver plus tard? Ci-dessous, la réponse de @ "Pas maintenant" est meilleure, car vous pouvez désactiver et réactiver après. update-rc.d apache2 disable
Wadih M.
54

Configurez les applications de démarrage Linux avec sysv-rc-conf :

apt-get install sysv-rc-conf

Comme d'autres l'ont fait remarquer, voici également update-rc.d pour la ligne cmd.

Par exemple, exécutez

update-rc.d apache2 disable

désactiver apache2 de tous les niveaux d’exécution.

Pas maintenant
la source
excellent outil - ne savait pas à ce sujet. Merci!
Pape
1
notez que cela n'arrêtera pas le service en cours, vous n'aurez pas besoin d'ajouter ceci: service foo stopou redémarrer le serveur
rubo77
15

Court:

Il n'y a pas de moyen fiable de le faire rapidement.

Longue:

Debian actuelle (Debian instable depuis le 2012-06-01) ne dispose actuellement d'aucun moyen rapide et fiable pour désactiver systématiquement un service / démon. - Parce qu'une mise à jour d'un paquet démon exécute inconditionnellement «/etc/init.d/package restart», le désactiver ou non pour ce niveau d'exécution.

Pour vous assurer qu'un démon ne démarre pas, vous pouvez:

  • le désinstaller
  • faire un renvoi local du script /etc/init.d/xyz (de cette façon, aucun outil ne le trouvera)
  • utiliser / abuser d'un fichier de configuration du paquet correspondant pour provoquer une sortie prématurée de ce script (par exemple, mettez une «sortie» au début de / etc / default / xyz au cas où il proviendrait du script init)
  • cherchez dans ce script init des manières «officielles» prédéfinies de ne pas démarrer ce démon

Il y a / existait (?) Une étape init-policy-quelque-chose pour les scripts init dans Debian, qui était supposée combler cette fonctionnalité manquante. - J'ai essayé de l'utiliser, je l'ai trouvé compliqué, j'ai trouvé un bogue et je ne l'ai plus jamais touché.

Mise à jour:

Passez à «systemd», une alternative à «initd». Un paquet Debian existe et vous pouvez désactiver un service avec quelque chose comme ceci:

cd /etc/systemd/system
ln -s /dev/null xyz.service
Robert Siemer
la source
1
+1 C'est une réponse très utile - et si je ne l'avais pas trouvée, j'aurais été piquée plus tard - merci!
Pouvez-vous unlink xyz.serviceaussi bien?
Jaggedsoft
@NextLocal, j'ai oublié pourquoi j'ai écrit cela, mais je pense que si un service dispose de scripts d'initialisation System V, systemdil les utilisera. - Alors le lien lui dit de ne pas les chercher.
Robert Siemer
Notez que la modification du /etc/default/xyzfichier pour ajouter un exitn'empêchera pas le conditionneur de remplacer le fichier avec la version correcte lors de la prochaine mise à niveau. (Le paquet enregistre les fichiers de configuration et, dans la plupart des cas, les scripts d'initialisation ne sont pas vus comme tels.) Donc, dans la plupart des cas, cela ne vous aiderait pas.
Alexis Wilke
Devuan vient à la rescousse: au lieu de systemd, il adopte le système classique SysV rc.d / init.d (ou openrc également si quelqu'un opte pour cela).
Csaba Toth
5

Exécuter cette commande

apt-get install rcconf

Une fois installé, exécutez rcconf dans SSH et vous recevrez une boîte de dialogue affichant tous les services configurés pour s'exécuter au démarrage. Sélectionnez ceux-ci en appuyant sur Espace pour désactiver / activer le particulier et vous avez terminé, il vous suffit de cliquer sur OK pour que ce service ne se dérange pas pour recommencer au prochain démarrage. En utilisant cela depuis des années. Outil très pratique pour les utilisateurs de Debian / Ubuntu comme moi.

Mark Levinsky
la source
Facile comme 1,2,3! Merci pour ce petit outil en ligne de commande.
DanielaWaranie
2

Je ne comprends pas ce que vous essayez d'accomplir.

Quels niveaux de course voulez-vous que foo court?

Si vous le voulez toujours, utilisez update-rc.d foo defaults; cela l'arrêtera en 0, 1 et 6, tout en le laissant tourner en 2, 3, 4 et 5. (1 ne devrait pas exécuter autre chose qu'un shell, 0 et 6 sont arrêtés et redémarrés)

Si vous souhaitez spécifier exactement les niveaux d'exécution à exécuter:

update-rc.d foo stop 0 1 6 3 . start 2 4 5 .
freiheit
la source
2

Je pense que cela ferait le travail: insserv -r foo

utilisateur38551
la source
1

Commencez à utiliser insserv à partir de Debian7

Afficher tous les services et les informations sur le niveau d'exécution

insserv --showall

Supprimer les scripts répertoriés de tous les niveaux d'exécution

insserv --remove [specify_script]
cacao
la source
0

Le gestionnaire de démarrage d'Ubuntu est une sorte de sysv-rc-conf light , une version plus conviviale, une version graphique, et beaucoup de gens qui liront ce fil l'apprécieront.

http://www.marzocca.net/linux/bum.html


la source
0

Sur un système basé sur Red Hat, vous pouvez utiliser

chkconfig httpd off
chkconfig httpd --del

supprimer le serveur des niveaux d'exécution

Sur un système basé sur Debian, tous les services sont supposés être démarrés par les fichiers situés dans les répertoires /etc/rc?.d/. Ces fichiers ont ensuite un lien symbolique vers les fichiers correspondants dans le répertoire /etc/init.d/. Si vous souhaitez qu'un service ne démarre pas par défaut, vous pouvez le renommer / le supprimer du répertoire /etc/rc?.d et votre modification sera conservée lors de la mise à niveau du package tant que l'un des liens de démarrage apparaîtra dans l'un des fichiers. les autres répertoires (3,4 et 5). Ou vous pouvez utiliser la commande update-rc.d pour modifier le (s) lien (s). Si vous souhaitez démarrer le service après, vous pouvez utiliser /etc/init.d/service_name start si vous laissez le début à la fin, vous donner les options qui peuvent être utilisées comme arrêter, redémarrer, recharger ...

Je pense que vous pouvez utiliser sysv-rc-conf pour le désactiver.

Rongeur43
la source
La question est étiquetée Debian, pas Fedora ou Red Hat.
0
sudo update-rc.d SERVICE disable

Si vous souhaitez spécifier des niveaux d'exécution.

sudo update-rc.d SERVICE disable|enable [S|2|3|4|5]

N'oubliez pas de changer de service au nom du programme.

sudo service SERVICE restart
Eddie
la source
0

Pourquoi ne sauvegardez-vous pas le script de démarrage ailleurs et ne le supprimez-vous pas dans /etc/init.d/? Si update-rc.d ne fonctionne pas.

Kosaka Honoka
la source