Como descobrir em qual ordem os scripts /etc/init.d estão carregados no Debian?

13

Quero executar um script sysvinit antes de outro e descobrir como fazer isso.

Para ter certeza, isso realmente acontece na ordem que eu gostaria, gostaria de ver uma lista, na ordem em que isso acontece.

eu encontrei sudo insserv --showall , mas não consigo entender, pois lista os scripts de inicialização várias vezes.

Como descobrir em qual ordem os scripts /etc/init.d estão carregados no Debian?

adrelanos
fonte
Usuários do BusyBox que chegam a este post: unix.stackexchange.com/questions/59018/… Observe o comentário "executando-os em ordem numérica"
dtmland 12/02/15

Respostas:

9

Existem alguns arquivos no diretório /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

Sempre que você executa, update-rc.dos arquivos mudam. .depend.bootarquivo é para Snível, .depend.starté para 2 3 4 5níveis e .depend.stoppara 0 1 6.

No meu caso, tenho a seguinte ordem em .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

Você também pode ver por que o pedido é apresentado da maneira que você vê acima. Cada próxima linha é assim:

cgrulesengd: rsyslog cgconfig

o que significa que cgrulesengdprecisa rsyslog cgconfigser iniciado antes.

Mikhail Morfikov
fonte
4

Para cada nível de execução (0 6), existe uma pasta /etc/rc[Nunette.d

Em todos os diretórios existem links simbólicos que começam com um "S" ou com um "K". "S" para iniciar e "K" para parar. Os scripts são executados de maneira lexical no nome do arquivo ; em outras palavras, o S10script será executado primeiro que o S20myscript. Por exemplo :

temos dois scripts simples, o script second.sh deve ser executado após o script fist.sh no nível de execução atual.

    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 é o meu nível atual?

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

Agora precisamos de um link simbólico, começando pelo S (N) myScript para o primeiro 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

Podemos reiniciar e verificar o log de mensagens:

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

Testado no antigo Centos5

Sirà
fonte
Eu recomendo usar / usr / bin / logger para anexar ao log do sistema em vez do redirecionamento, para que você não escreva acidentalmente ">" acidentalmente um dia e limpe seus logs.
DanB