GNU/Linux >> Linux Esercitazione >  >> Linux

Quando si esegue a un livello di esecuzione, esegue livelli di esecuzione precedenti?

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.

Correlati:il modo "corretto" per verificare se un servizio è in esecuzione in uno script?

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.


Linux
  1. Le utilità Linux sono intelligenti quando si eseguono comandi convogliati?

  2. Perché non è possibile trovare Read /run/user/1000/gvfs anche se è in esecuzione come root?

  3. Come elencare le sessioni dello schermo in esecuzione?

  4. Esecuzione di notify-send come root

  5. Esegui il comando shell in jenkins come utente root?

Esegui file binari in Linux

Esecuzione di script di shell in parallelo

quando uso CPAN in Linux Ubuntu dovrei eseguirlo usando sudo / come root o come utente predefinito

impossibile eseguire il file binario quando si tenta di eseguire uno script di shell su Linux

Impossibile eseguire Sonar Server perché Elasticsearch non può essere eseguito come root

Richiedi all'utente di accedere come root durante l'esecuzione di uno script di shell