Comment changer l'ordre de démarrage / démarrage des services Linux?

Réponses:

11

Vous pouvez changer l'ordre en renommant les liens symboliques sous /etc/rcX.d/ où x sera votre niveau d'exécution.

Vous verrez un tas de fichiers commençant par Sxx ou Kxx. Les liens S sont tracés lors du démarrage tandis que les K sont analysés pour l'arrêt. Le xx représente ici l'ordre.

Mais cet ordre est défini pour une raison, alors soyez prudent lorsque vous les changez, par exemple. ntpd ne doit démarrer qu'après l'initialisation du sous-système réseau.

chiffons
la source
21

Au lieu de le faire manuellement, comme suggéré dans les autres réponses, vous pouvez également modifier le script init. Ajoutez simplement une telle ligne à l'en-tête:

# chkconfig: 35 90 10

Cela demandera chkconfigd'ajouter le service aux niveaux d'exécution 3 et 5, avec une position de départ de 90 et une position d'arrêt de 10.

Christian
la source
Cette. Absolument ça. Si vous renommez manuellement les liens symboliques, vous serez surpris si quelqu'un arrive et s'exécutechkconfig off servicename && chkconfig on servicename
batfastad
A fonctionné comme un charme. J'avais besoin de configurer des dépendances entre mysqld et un conteneur de servlet. Je n'ai pas pu déterminer la position de départ de mysqld, j'ai donc configuré la position de départ du conteneur de servlet sur 99 et cela fonctionne très bien, mysqld démarre en premier. Merci.
jpangamarca
7

Vous voulez en savoir un peu plus sur vos niveaux d'exécution et les répertoires rc.d. À l'intérieur des répertoires rc.d, vous pouvez trouver les liens S et K, comme S20apache K10apache, c'est essentiellement ce qui ordonne le démarrage / l'arrêt des scripts.

Il y a quelques changements en cours sur cette architecture mais la plupart des linux l'utilisent toujours.

coredump
la source
Je suis étonné que la plupart des distributions utilisent encore ce système; de meilleurs systèmes comme ceux qui rcorderexistent depuis un certain temps.
Chris S
J'envie un peu Solaris svc, mais je pourrais me passer des trucs xml
coredump
C'est parfait. En fonction de votre distribution, cependant, vous pouvez avoir différentes manières de modifier cette valeur - alors lisez la documentation spécifique à votre distribution.
Andrew M.
1
Certaines distributions, comme Ubuntu, utilisent Upstart ( Wikipedia ).
pause jusqu'à nouvel ordre.
7

Si vous êtes arrivé ici, il y a de fortes chances que vous ayez deux services dont l'un dépend de l'autre mais, parce qu'ils démarrent dans le mauvais ordre, celui avec la dépendance ne démarre pas. Les suggestions sur la modification des liens symboliques sont informatives, en termes d'illustration du fonctionnement de la séquence de démarrage, et fonctionneraient bien jusqu'à ce que quelqu'un fasse un "chkconfig on" sur votre service, moment auquel les liens symboliques seraient recréés tels qu'ils étaient à l'origine. Vraiment, vous voulez traiter le problème au niveau du script d'initialisation, ce qui est en fait beaucoup moins compliqué à faire de toute façon. Il sera également cohérent à travers les différents niveaux d'exécution. Vous n'aurez probablement pas besoin d'ajouter une ligne "# chkconfig" comme suggéré dans la réponse 4 car il y aura probablement déjà une ligne similaire.

J'utiliserai un exemple de serveur exécutant Openldap (slapd) avec un backend de base de données MySQL (mysqld). Configurer cette paire, et pourquoi vous voudrez peut-être, est une toute autre histoire.

Au démarrage, Openldap ne démarre pas car cela dépend de MySQL et la séquence de démarrage a essayé de démarrer avant lui - slapd a la position 27 et mysqld a la position 64

Les liens symboliques pertinents dans /etc/rc3.d/ sont

S27slapd -> ../init.d/slapd 
and
S64mysqld -> ../init.d/mysqld

Je recherche les valeurs définies dans les deux scripts d'initialisation:

[root ~]# grep chkconfig /etc/rc.d/init.d/mysqld
# chkconfig: - 64 36

[root ~]# grep chkconfig /etc/rc.d/init.d/slapd
# chkconfig: - 27 73 

Je modifie la ligne chkconfig dans /etc/rc.d/init.d/slapd pour avoir une position de départ supérieure à celle dans /etc/rc.d/init.d/mysqld (j'ai choisi 85)

[root ~]# grep chkconfig /etc/rc.d/init.d/slapd
# chkconfig: - 85 73

Je fais "chkconfig slapd on" et revérifie les liens symboliques

[root ~]# chkconfig slapd on
[root ~]# ls -l /etc/rc3.d/ | grep mysqld
lrwxrwxrwx  1 root root 16 Dec 10 13:45 S64mysqld -> ../init.d/mysqld
[root ~]# ls -l /etc/rc3.d/ | grep slapd
lrwxrwxrwx  1 root root 15 Apr 28 14:18 S85slapd -> ../init.d/slapd

Maintenant, lorsque ce serveur démarre, mysqld démarre avant slapd et tout va bien avec le monde.

Jim Smyth
la source