Come modificare l'ordine di avvio / avvio dei servizi Linux?


Risposte:


11

È possibile modificare l'ordine rinominando i collegamenti simbolici in /etc/rcX.d/ dove x sarà il livello di esecuzione.

Vedrai un mucchio di file che iniziano con Sxx o Kxx. I collegamenti S vengono tracciati durante l'avvio mentre quelli K vengono analizzati per l'arresto. La xx qui rappresenta l'ordine.

Ma questo ordine è impostato per un motivo, quindi fai attenzione mentre li cambi. Per esempio. ntpd dovrebbe iniziare solo dopo l'inizializzazione del sottosistema di rete.


21

Invece di farlo manualmente, come suggerito nelle altre risposte, puoi anche cambiare lo script di init. Basta aggiungere una tale riga all'intestazione:

# chkconfig: 35 90 10

Questo indicherà chkconfigdi aggiungere il servizio ai runlevel 3 e 5, con una posizione iniziale di 90 e una posizione di uccisione di 10.


Questo. Assolutamente questo. Se rinomini manualmente i collegamenti simbolici avrai una sorpresa se qualcuno arriva e correchkconfig off servicename && chkconfig on servicename
batfastad

Ha funzionato come un fascino. Avevo bisogno di configurare le dipendenze tra mysqld e un contenitore servlet. Non sono riuscito a capire la posizione iniziale di mysqld, quindi ho configurato la posizione iniziale del contenitore servlet su 99 e funziona perfettamente, mysqld viene avviato per primo. Grazie.
jpangamarca,

7

Vuoi leggere qualcosa sui tuoi runlevel e directory rc.d. All'interno delle directory rc.d è possibile trovare i collegamenti S e K, come S20apache K10apache, che è fondamentalmente ciò che ordina l'avvio / arresto degli script.

Ci sono alcune modifiche in corso su questa architettura ma la maggior parte dei Linux la sta ancora usando.


Sono stupito che la maggior parte delle distro utilizzi ancora questo sistema; sistemi migliori come rcordersono in circolazione da un po 'di tempo.
Chris S,

In un svccerto senso invidio Solaris , ma potrei fare a meno della roba xml
coredump,

Questo è perfetto. A seconda della tua distribuzione, tuttavia, potresti avere diversi modi per modificare questo valore, quindi leggi la documentazione specifica per la tua distribuzione.
Andrew M.

1
Alcune distribuzioni, come Ubuntu, usano Upstart ( Wikipedia ).
In pausa fino a ulteriore avviso.

7

Se sei arrivato qui, è probabile che tu abbia due servizi in cui uno dipende dall'altro ma, poiché stanno iniziando nell'ordine sbagliato, quello con la dipendenza non riesce ad avviarsi. I suggerimenti sulla modifica dei collegamenti simbolici sono informativi, in termini di illustrare il modo in cui viene eseguita la sequenza di avvio, e funzionerebbero bene fino a quando qualcuno non eseguisse un "chkconfig on" sul tuo servizio, a quel punto i collegamenti simbolici sarebbero stati ricreati come erano in origine. Davvero, vuoi affrontare il problema a livello di script di init, che in realtà è molto meno complicato da fare comunque. Sarà inoltre coerente tra i diversi runlevel. Probabilmente non avrai bisogno di aggiungere una riga "# chkconfig" come suggerito nella risposta 4 in quanto probabilmente ci sarà già una riga simile.

Userò un esempio di un server che esegue Openldap (slapd) con un back-end del database MySQL (mysqld). Configurare quella coppia, e perché potresti volerlo, è tutta un'altra storia.

All'avvio, Openldap non si avvia perché dipende da MySQL e la sequenza di avvio ha tentato di avviarsi prima di esso - slapd ha la posizione 27 e mysqld ha la posizione 64

I relativi collegamenti simbolici in /etc/rc3.d/ sono

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

Cerco i valori impostati nei due script init:

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

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

Modifico la riga chkconfig in /etc/rc.d/init.d/slapd per avere una posizione iniziale superiore a quella in /etc/rc.d/init.d/mysqld (ho scelto 85)

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

Faccio "chkconfig slapd on" e ricontrollo dei collegamenti simbolici

[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

Ora, quando questo server si avvia, mysqld si avvia prima di slapd e va tutto bene per il mondo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.