Ubuntu12.04: Comment désactiver un processus démon au démarrage

23

J'utilise normalement service start/stopou initctl start/stoppour démarrer ou arrêter un processus démon, mais maintenant ce que je recherche, c'est de désactiver un processus démon au démarrage, par exemple au démarrage mysqld.

À l' heure actuelle ce que je fais est renommant /etc/init/mysql.confpour /etc/init/mysql.conf.bakmais après avoir lu un peu , systemdje suis venu pour savoir qu'il fournit l' enable & disableoption pour la tâche ci - dessus.

Donc, y a-t-il quelque chose de similaire dans Ubuntu 12.04 avec upstart.

RanRag
la source
Vous dites que vous utilisez systemd? Je l'utilise sur mon ordinateur Fedora 17. systemctl [enable|disable|is-enabled] mysqld.service
BenjiWiebe
1
@BenjiWiebe: Non, je n'utilise pas systemd. J'utilise upstart car systemd n'est pas la valeur par défaut dans ubuntu 12.04 / 12.10.
RanRag
1
oh je vois maintenant ... Je ne sais pas à quoi je pensais.
BenjiWiebe

Réponses:

26

Vous pouvez désactiver les services en exécutant la commande suivante:

sudo update-rc.d -f <service name> disable

Extrait de la page de manuel :

Lorsqu'il est exécuté avec les options de désactivation [S | 2 | 3 | 4 | 5], update-rc.d modifie les liens de niveau d'exécution existants pour le script /etc/init.d/name en renommant les liens de démarrage pour arrêter les liens avec un numéro de séquence égal à la différence de 100 moins le numéro de séquence d'origine.

Mark Cohen
la source
2
Je n'ai pas assez de réputation pour voter contre et le faire sans explication serait de toute façon impoli, alors juste un commentaire: La question de @Noob concerne Ubuntu 12.04 qui utilise Upstart (/etc/init/*.conf configuration fichiers) pour la plupart des démons système (comme mentionné par @Noob) alors que votre suggestion ne fonctionne que pour les démons qui ont commencé à utiliser des scripts dans /etc/init.d/* (l'ancien style SysV). Edit: Pour mémoire, warl0ck a la bonne réponse (merci!).
xolox
3
La question porte sur une situation hypothétique ou générale utilisant mysql comme cas d'actualité particulier. OP semblait au moins partiellement au courant de cette réponse, mais il peut être utile à la postérité de noter que certains packages utiles n'honorent pas et n'honoreront pas le format upstart (comme webmin et de nombreux auto-construits à partir de packages source au moment du commentaire) . Cela signifie que cette méthode peut être une réponse partielle valide pour le contexte, tout comme les réponses de warl0ck et de Mark pour aborder le point particulier du service hypothétique mysql installé avec un gestionnaire de paquets.
JustinC
L'indicateur -f n'est pas nécessaire.
Dannyman
20

La bonne façon de désactiver et de démarrer le service est de créer un fichier XX.override,

echo 'manual' > /etc/init/mysqld.override

De cette façon, le service parvenu ne démarrera pas automatiquement

Marguerite
la source
Est-ce que cela fonctionne toujours avec Ubuntu 12.04?
RSK
@RSK oui, pourquoi ne pas l'essayer?
daisy
1
J'ai essayé et je n'ai pas travaillé pour moi. Lemme réessayez et vous mettra à jour.
RSK
Non, cela ne fonctionne pas sur Ubuntu-14.04.
Hi-Angel
1
@RSK yes, why don't you just give it a try?Je suppose, car il est très gênant de redémarrer le système avec "un essai" à chaque conseil de cette page.
user907860
7

@ warl0ck a raison; Je voulais ajouter que ces informations sont assez bien documentées dans la documentation Upstart: http://upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting

Plus précisément:

Avec Upstart 1.3, vous pouvez utiliser des fichiers de remplacement et la strophe manuelle pour obtenir le même résultat de manière plus simple [27]:

# echo "manual" >> /etc/init/myjob.override

Notez que vous pouvez obtenir le même effet en procédant comme suit:

# echo "manual" >> /etc/init/myjob.conf

Cependant, l'utilisation de la fonction de remplacement signifie que vous pouvez laisser le fichier de configuration de travail d'origine intact.

Pour revenir au comportement d'origine, supprimez ou renommez le fichier de remplacement (ou supprimez la strophe manuelle de votre fichier ".conf").

Mark Glossop
la source
5

Il y a aussi un joli logiciel pour vous aider. Son appelé rcconf.

Téléchargez-le simplement en utilisant:

sudo apt-get install rcconf

et l'utiliser avec la commande

rcconf

Vous obtenez une belle interface (en ligne de commande) pour désactiver / activer les services.

delh
la source
Ce n'est pas inclus sur le système, alors installez plus de choses ne serait pas la meilleure réponse.
m3nda
mais vraiment utile: D
Magico
1

Essayez de naviguer /etc/rc2.det de renommer ce que vous ne souhaitez pas exécuter au démarrage: changez le (S, majuscule) "S" en "K" (par exemple, S02mysqlen K02mysql). Si vous changez d'avis, inversez-le. Je pense que le 2 fait référence au niveau d'exécution, auquel cas 2 est le niveau d'exécution multi-utilisateur par défaut. C'est probablement là que vous avez la plupart des trucs pour une utilisation quotidienne de l'ordinateur.

Edit : Lisez le commentaire de James O'Gorman ci-dessous.

Emanuel Berg
la source
1
Oui, «2» fait référence au niveau d'exécution. Vous pouvez vérifier votre niveau d'exécution actuel à l'aide de who -rou runlevel.
RanRag
C'est vrai, who --runlevel.
Emanuel Berg
1
Bien que cela atteigne ce que vous voulez, ce n'est techniquement pas la bonne chose à faire. En termes d'initialisation SysV, les scripts 'S' sont des scripts de démarrage et 'K' sont des scripts kill - c'est-à-dire que S sont exécutés dans l'ordre au démarrage et K sont exécutés dans l'ordre à l'arrêt (ou en passant à un niveau d'exécution inférieur).
James O'Gorman
@ JamesO'Gorman: Intéressant, je suis sur Debian, dites-vous que mes "scripts K" sont exécutés à l'arrêt? Y a-t-il une lettre qui pourrait être utilisée pour désactiver complètement le script, sans aucun risque? (Il est plutôt pratique de les conserver dans le même dossier, si une nouvelle situation devait se présenter là où vous le souhaitiez.)
Emanuel Berg
@EmanuelBerg Oui, initexécutera «KXXscript stop» à l'arrêt. Vous devez soit supprimer le lien symbolique, soit supprimer le bit d'exécution du vrai script d'initialisation. Je crois que Debian utilise update-rc.dpour gérer cela. Utilisation de RHEL (et dérivés) chkconfig.
James O'Gorman
0

Avec Upstart, la configuration du service se trouve dans des fichiers /etc/init/. Par exemple, ssh est contrôlé à l'aide d'un fichier de configuration/etc/init/ssh.conf

Ce fichier spécifie les "événements" qui inviteront Upstart à démarrer le "job".

Pour empêcher un service de démarrer automatiquement, plusieurs méthodes peuvent être utilisées:
a) Renommez le fichier service.conf afin qu'il ne se termine pas par .conf
b) Mettez en commentaire la ligne "start on" du fichier service.conf.

Dans les versions plus récentes de upstart (depuis la v1.3 au moins), vous pouvez également remplacer le démarrage en ligne à l'aide d'un fichier service.override, vous pouvez donc utiliser:
# echo manual > /etc/init/service.override

Enfin, vous pouvez également ajouter le mot clé "manuel" à la fin du fichier de configuration du service, par exemple via:
# echo manual >> /etc/init/service.conf

Notez que cela n'arrête pas le service en cours d'exécution, il l'empêche simplement de démarrer automatiquement. Lorsqu'il est défini pour un démarrage "manuel", vous contrôlez le service à l'aide d'initctl, par exemple pour arrêter et démarrer le démon SSH:
# initctl stop ssh
# initctl start ssh

On peut dire que la meilleure documentation pour Upstart est à http://upstart.ubuntu.com/cookbook/

La section 11.44 couvre «la désactivation d'un service à partir du démarrage automatique, ici: http://upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting

Johan
la source
0

Eh bien, je dois dire que la déclaration

echo "manual" >> /etc/init/myjob.override

est un peu trompeur car cela signifie ajouter le fichier de remplacement. J'ai testé cela le 14.04 avec le gestionnaire de réseau et le suivant n'a pas fonctionné

vim /etc/init/network-manager.override:
start
manual

Mais cela a fonctionné

vim /etc/init/network-manager.override:
#start
manual

Donc, IMO, l'initctl recherche la première ligne non commentée et l'exécute. Peut-être que je me trompe, mais ce sont mes résultats de test. Les contributions sont les bienvenues.

infoclogged
la source