¿Cómo averiguar en qué orden se cargan los scripts /etc/init.d en Debian?

13

Quiero ejecutar un script sysvinit antes que otro y descubrí cómo hacerlo.

Para asegurarme, esto realmente sucede en el orden que me gusta, me gustaría ver una lista, en ese orden.

Ya lo encontré sudo insserv --showall, pero no puedo entenderlo, ya que enumera scripts de inicio varias veces.

¿Cómo averiguar en qué orden se cargan los scripts /etc/init.d en Debian?

adrelanos
fuente
Usuarios de BusyBox que llegan a esta publicación: unix.stackexchange.com/questions/59018/… Tenga en cuenta el comentario "ejecutarlos en orden numérico"
dtmland

Respuestas:

9

Hay algunos archivos en el directorio /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

Cada vez que ejecute update-rc.dlos archivos cambiarán. .depend.bootel archivo es para Snivel, .depend.startes para 2 3 4 5niveles y .depend.stoppara 0 1 6.

En mi caso, tengo el siguiente orden en .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

También puede ver por qué el orden se presenta de la manera que se ve arriba. Cada línea siguiente se ve así:

cgrulesengd: rsyslog cgconfig

lo que significa que cgrulesengddebe rsyslog cgconfiginiciarse antes.

Mikhail Morfikov
fuente
4

Para cada nivel de ejecución (0 6) hay una carpeta /etc/rc[Nfont>.d

En cada directorio hay un enlace simbólico que comienza con una "S" o con una "K". "S" para iniciar e "K" para detener. Los scripts se ejecutan de forma léxica del nombre del archivo , en otras palabras, S10script se ejecutará primero que S20myscript. Por ejemplo :

tenemos dos scripts simples, el script second.sh debe ejecutarse después del script fist.sh en el nivel de ejecución actual.

    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

¿Cuál es mi nivel actual?

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

Ahora necesitamos un enlace simbólico que comience con S (N) myScript para el primer y 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

Podemos reiniciar y verificar el registro de mensajes:

    [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)]: 

Probado en el viejo Centos5

Sirà
fuente
Recomiendo usar / usr / bin / logger para agregar al registro del sistema en lugar de la redirección, para que no escriba accidentalmente ">" por accidente un día y borre sus registros.
DanB