Se dico al mio sistema di passare al livello di esecuzione 3, significa che prima viene eseguito il livello di esecuzione 0, 1, 2 e poi infine il livello di esecuzione 3?
Pensavo che la risposta a questa domanda fosse sì. Ma quando guardo sul mio sistema RHEL 6 vedo che molte delle directory rcX.d contengono gli stessi collegamenti simbolici.
In Il mio /etc/rc.d/rc0.d/
[[email protected] rc.d]# ls -lah /etc/rc.d/rc0.d/
total 8.0K
drwxr-xr-x. 2 root root 4.0K Jun 27 11:59 .
drwxr-xr-x. 10 root root 4.0K Jul 9 15:06 ..
lrwxrwxrwx. 1 root root 13 Jun 12 13:02 K05atd -> ../init.d/atd
lrwxrwxrwx. 1 root root 14 Jun 12 13:01 K10cups -> ../init.d/cups
lrwxrwxrwx. 1 root root 19 Jun 12 10:57 K10saslauthd -> ../init.d/saslauthd
lrwxrwxrwx. 1 root root 18 Jun 12 12:51 K15svnserve -> ../init.d/svnserve
lrwxrwxrwx. 1 root root 14 Jun 12 10:58 K25sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 17 Jun 12 10:57 K30postfix -> ../init.d/postfix
lrwxrwxrwx. 1 root root 17 Jun 12 12:26 K50dnsmasq -> ../init.d/dnsmasq
lrwxrwxrwx. 1 root root 20 Jun 12 10:57 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 15 Jun 12 10:57 K60crond -> ../init.d/crond
lrwxrwxrwx. 1 root root 25 Jun 27 11:59 K65vboxadd-service -> ../init.d/vboxadd-service
lrwxrwxrwx. 1 root root 17 Jun 27 11:58 K70vboxadd -> ../init.d/vboxadd
lrwxrwxrwx. 1 root root 21 Jun 27 11:59 K70vboxadd-x11 -> ../init.d/vboxadd-x11
lrwxrwxrwx. 1 root root 17 Jun 12 12:26 K73winbind -> ../init.d/winbind
lrwxrwxrwx. 1 root root 19 Jun 12 12:26 K74haldaemon -> ../init.d/haldaemon
lrwxrwxrwx. 1 root root 26 Jun 12 10:58 K75blk-availability -> ../init.d/blk-availability
lrwxrwxrwx. 1 root root 15 Jun 12 11:15 K75netfs -> ../init.d/netfs
lrwxrwxrwx. 1 root root 19 Jun 12 10:57 K75udev-post -> ../init.d/udev-post
lrwxrwxrwx. 1 root root 24 Jun 12 12:26 K84NetworkManager -> ../init.d/NetworkManager
lrwxrwxrwx. 1 root root 24 Jun 27 11:59 K84wpa_supplicant -> ../init.d/wpa_supplicant
lrwxrwxrwx. 1 root root 19 Jun 12 10:58 K85mdmonitor -> ../init.d/mdmonitor
lrwxrwxrwx. 1 root root 20 Jun 12 12:25 K85messagebus -> ../init.d/messagebus
lrwxrwxrwx. 1 root root 20 Jun 12 10:58 K87multipathd -> ../init.d/multipathd
lrwxrwxrwx. 1 root root 21 Jun 12 10:57 K87restorecond -> ../init.d/restorecond
lrwxrwxrwx. 1 root root 16 Jun 12 10:58 K88auditd -> ../init.d/auditd
lrwxrwxrwx. 1 root root 15 Jun 27 11:59 K88iscsi -> ../init.d/iscsi
lrwxrwxrwx. 1 root root 17 Jun 12 10:57 K88rsyslog -> ../init.d/rsyslog
lrwxrwxrwx. 1 root root 16 Jun 12 10:58 K89iscsid -> ../init.d/iscsid
lrwxrwxrwx. 1 root root 21 Jun 12 13:01 K89portreserve -> ../init.d/portreserve
lrwxrwxrwx. 1 root root 15 Jun 12 11:15 K89rdisc -> ../init.d/rdisc
lrwxrwxrwx. 1 root root 17 Jun 12 11:15 K90network -> ../init.d/network
lrwxrwxrwx. 1 root root 19 Jun 12 10:57 K92ip6tables -> ../init.d/ip6tables
lrwxrwxrwx. 1 root root 18 Jun 12 10:57 K92iptables -> ../init.d/iptables
lrwxrwxrwx. 1 root root 22 Jun 12 10:58 K99lvm2-monitor -> ../init.d/lvm2-monitor
lrwxrwxrwx. 1 root root 17 Jun 12 11:15 S00killall -> ../init.d/killall
lrwxrwxrwx. 1 root root 14 Jun 12 11:15 S01halt -> ../init.d/halt
lrwxrwxrwx. 1 root root 15 Jun 26 12:32 S95jexec -> ../init.d/jexec
E in /etc/rc.d/rc1.d/ Vedo lo stesso set di collegamenti simbolici di rc0.d più collegamenti extra. Questo sembra indicare che le directory rc0.d, rc1.d sono indipendenti e che per arrivare al livello di esecuzione 1 non esegue le cose nel livello di esecuzione 0. Il che significa che possono succedere cose brutte se in qualche modo i collegamenti simbolici in rc0 .d non sono stati replicati esattamente in rc1.d, … ecc.
Allora come funziona davvero? Scansiona semplicemente i file in una specifica directory rc.X o esegue tutte le directory rc.X che hanno un livello inferiore rispetto al livello rc passato a init?
[ro[email protected] rc.d]# ls -lah /etc/rc.d/rc1.d/
total 8.0K
drwxr-xr-x. 2 root root 4.0K Jun 27 11:59 .
drwxr-xr-x. 10 root root 4.0K Jul 9 15:06 ..
lrwxrwxrwx. 1 root root 13 Jun 12 13:02 K05atd -> ../init.d/atd
lrwxrwxrwx. 1 root root 14 Jun 12 13:01 K10cups -> ../init.d/cups
lrwxrwxrwx. 1 root root 19 Jun 12 10:57 K10saslauthd -> ../init.d/saslauthd
lrwxrwxrwx. 1 root root 18 Jun 12 12:51 K15svnserve -> ../init.d/svnserve
lrwxrwxrwx. 1 root root 14 Jun 12 10:58 K25sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 17 Jun 12 10:57 K30postfix -> ../init.d/postfix
lrwxrwxrwx. 1 root root 17 Jun 12 12:26 K50dnsmasq -> ../init.d/dnsmasq
lrwxrwxrwx. 1 root root 20 Jun 12 10:57 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 15 Jun 12 10:57 K60crond -> ../init.d/crond
lrwxrwxrwx. 1 root root 25 Jun 27 11:59 K65vboxadd-service -> ../init.d/vboxadd-service
lrwxrwxrwx. 1 root root 17 Jun 27 11:58 K70vboxadd -> ../init.d/vboxadd
lrwxrwxrwx. 1 root root 21 Jun 27 11:59 K70vboxadd-x11 -> ../init.d/vboxadd-x11
lrwxrwxrwx. 1 root root 17 Jun 12 12:26 K73winbind -> ../init.d/winbind
lrwxrwxrwx. 1 root root 19 Jun 12 12:26 K74haldaemon -> ../init.d/haldaemon
lrwxrwxrwx. 1 root root 15 Jun 12 11:15 K75netfs -> ../init.d/netfs
lrwxrwxrwx. 1 root root 24 Jun 12 12:26 K84NetworkManager -> ../init.d/NetworkManager
lrwxrwxrwx. 1 root root 24 Jun 27 11:59 K84wpa_supplicant -> ../init.d/wpa_supplicant
lrwxrwxrwx. 1 root root 19 Jun 12 10:58 K85mdmonitor -> ../init.d/mdmonitor
lrwxrwxrwx. 1 root root 20 Jun 12 12:25 K85messagebus -> ../init.d/messagebus
lrwxrwxrwx. 1 root root 20 Jun 12 10:58 K87multipathd -> ../init.d/multipathd
lrwxrwxrwx. 1 root root 21 Jun 12 10:57 K87restorecond -> ../init.d/restorecond
lrwxrwxrwx. 1 root root 16 Jun 12 10:58 K88auditd -> ../init.d/auditd
lrwxrwxrwx. 1 root root 15 Jun 27 11:59 K88iscsi -> ../init.d/iscsi
lrwxrwxrwx. 1 root root 17 Jun 12 10:57 K88rsyslog -> ../init.d/rsyslog
lrwxrwxrwx. 1 root root 16 Jun 12 10:58 K89iscsid -> ../init.d/iscsid
lrwxrwxrwx. 1 root root 21 Jun 12 13:01 K89portreserve -> ../init.d/portreserve
lrwxrwxrwx. 1 root root 15 Jun 12 11:15 K89rdisc -> ../init.d/rdisc
lrwxrwxrwx. 1 root root 17 Jun 12 11:15 K90network -> ../init.d/network
lrwxrwxrwx. 1 root root 19 Jun 12 10:57 K92ip6tables -> ../init.d/ip6tables
lrwxrwxrwx. 1 root root 18 Jun 12 10:57 K92iptables -> ../init.d/iptables
lrwxrwxrwx. 1 root root 22 Jun 12 10:58 S02lvm2-monitor -> ../init.d/lvm2-monitor
lrwxrwxrwx. 1 root root 26 Jun 12 10:58 S25blk-availability -> ../init.d/blk-availability
lrwxrwxrwx. 1 root root 19 Jun 12 10:57 S26udev-post -> ../init.d/udev-post
lrwxrwxrwx. 1 root root 15 Jun 26 12:32 S95jexec -> ../init.d/jexec
lrwxrwxrwx. 1 root root 16 Jun 12 11:15 S99single -> ../init.d/single
Risposta accettata:
Quando cambi runlevel, le uniche cose eseguite sono gli script in /etc/rc.d/rc${NEW_LEVEL}.d/
.
Ciò significa che hai ragione:Ogni rc*.d
directory deve essere in grado di gestire tutto delle modifiche al processo/servizio quando si passa da un altro runlevel. Quindi ogni directory rc contiene un set completo di script per raggiungere quel runlevel.
Supponiamo che tu stia passando al runlevel 3. Il /etc/rc.d/rc3.d/K*
gli script tenteranno di uccidere tutti i processi in esecuzione nel runlevel precedente (potrebbe essere qualsiasi numero) e /etc/rc.d/rc3.d/S*
gli script avvieranno tutti i processi che devono essere avviati (e non erano già stati avviati nel runlevel precedente).
Chiaramente, la gestione di tutti questi collegamenti simbolici sarebbe una vera seccatura, quindi ci sono utilità per aiutare a gestirlo. Su Debian e Ubuntu (almeno, forse altri), puoi usare update-rc.d
per abilitare/disabilitare selettivamente gli script trovati in /etc/init.d
o per impostarli su impostazioni "predefinite" o consigliate per ogni script. Questo creerà e aggiornerà tutti i collegamenti simbolici per te, per riflettere eventuali modifiche alla configurazione che desideri apportare. Su CentOS, capisco che puoi usare ntsysv
o chkconfig
fare la stessa cosa.
In effetti, tu mai tocca i file in /etc/rc*.d/
(o /etc/rc.d/rc*.d/
) te stesso; usi sempre lo strumento (es. update-rc.d
, ntsysv
, chkconfig
) per apportare eventuali modifiche.