Come scoprire in quale ordine gli script /etc/init.d sono caricati su Debian?


13

Voglio eseguire uno script sysvinit prima di un altro e capire come farlo.

Per essere sicuro, questo in realtà accade nell'ordine che mi piace, vorrei vedere un elenco, in quale ordine.

Ho sudo insserv --showallgià trovato , ma non riesco a capirlo, poiché elenca gli script di init più volte.

Come scoprire in quale ordine gli script /etc/init.d sono caricati su Debian?


Gli utenti BusyBox che arrivano a questo post: unix.stackexchange.com/questions/59018/… Nota il commento "eseguendoli in ordine numerico"
dtmland

Risposte:


9

Ci sono alcuni file nella directory /etc/init.d/:

$ ls -al /etc/init.d/ | grep -i depend
-rw-r--r--   1 root root  2739 Feb 17 05:20 .depend.boot
-rw-r--r--   1 root root  2221 Feb 17 05:20 .depend.start
-rw-r--r--   1 root root  1855 Feb 17 05:20 .depend.stop

Ogni volta che esegui update-rc.di file cambieranno. .depend.bootil file è per Slivello, .depend.startè per 2 3 4 5livelli e .depend.stopper 0 1 6.

Nel mio caso, ho il seguente ordine in .depend.start:

TARGETS = killprocs motd nvidia-kernel nfs-common rsyslog privoxy virtualbox
linuxlogo acpi-fakekey binfmt-support fancontrol openvpn hddtemp cgconfig 
dropbox-container dbus dnscrypt-proxy pulseaudio atd cryptmount exim4 
qbittorrent-nox ddclient acpi-support smartmontools ssh ntp loadcpufreq acpid 
cron rsync cgrulesengd cpufrequtils bootlogs bootchart-done single rmnologin 
rc.local stop-bootlogd

Puoi anche capire perché l'ordine si presenta come vedi sopra. Ogni riga successiva è simile alla seguente:

cgrulesengd: rsyslog cgconfig

il che significa che cgrulesengddeve rsyslog cgconfigessere avviato prima.


4

Per ogni runlevel (0 6) esiste una cartella /etc/rc[N[.d

In ogni directory ci sono collegamenti simbolici che iniziano con una "S" o con una "K". "S" per avviare e "K" per interrompere. Gli script vengono eseguiti in un modo lessicale del nome file , in altre parole S10script verrà eseguito prima di S20myscript. Per esempio :

abbiamo due semplici script, lo script second.sh deve essere eseguito dopo lo script fist.sh nel runlevel corrente.

    root@localhost init.d]# cat /etc/init.d/first.sh 
    #!/bin/bash
    #
    echo 'I am the first'  >> /var/log/messages

    root@localhost init.d]# cat /etc/init.d/second.sh   
    #!/bin/bash
    #
    echo 'I am the second'  >> /var/log/messages

Qual è il mio livello attuale?

    [root@localhost init.d]# runlevel 
    N 5

Ora abbiamo bisogno di un collegamento simbolico che inizi cioè S (N) myScript per il primo e S (N + 1) mysecondScript:

    root@localhost rc5.d]# ln -s /etc/init.d/first.sh /etc/rc5.d/S1first
    root@localhost rc5.d]# ln -s /etc/init.d/second.sh /etc/rc5.d/S2second

Possiamo riavviare e controllare il registro dei messaggi:

    [root@localhost ~]# cat /var/log/messages | grep "I am" -A 1 -B 1
    Dec 13 13:53:36 localhost rpc.statd[3468]: Version 1.0.9 Starting
    I am the first
    Dec 13 13:53:37 localhost hcid[3532]: Bluetooth HCI daemon
    --
    Dec 13 13:53:40 localhost automount[3689]: lookup_read_master:       lookup(nisplus): couldn't locate nis+ table auto.master
    I am the second
    Dec 13 13:53:41 localhost gpm[3785]: *** info [startup.c(95)]: 

Testato su vecchi Centos5


Ti consiglio di usare / usr / bin / logger per aggiungere al registro di sistema invece del reindirizzamento, in modo da non scrivere accidentalmente ">" un giorno e cancellare i tuoi registri.
Dan
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.