Wie kann man herausfinden, in welcher Reihenfolge /etc/init.d-Skripte auf Debian geladen sind?

13

Ich möchte ein Sysvinit-Skript vor einem anderen ausführen und herausfinden, wie das geht.

Um sicherzustellen, dass dies tatsächlich in der Reihenfolge geschieht, die ich mag, möchte ich eine Liste sehen, in welcher Reihenfolge dies geschieht.

Ich habe es sudo insserv --showallbereits gefunden , kann es aber nicht nachvollziehen, da es Init-Skripte mehrfach auflistet.

Wie kann man herausfinden, in welcher Reihenfolge /etc/init.d-Skripte auf Debian geladen sind?

adrelanos
quelle
BusyBox-Benutzer, die an diesem Beitrag ankommen: unix.stackexchange.com/questions/59018/… Beachten Sie den Kommentar "Ausführen in numerischer Reihenfolge"
dtmland

Antworten:

9

Es gibt einige Dateien im Verzeichnis /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

Wann immer Sie ausführen update-rc.d, ändern sich die Dateien. .depend.bootDatei ist für SLevel, .depend.startist für 2 3 4 5Level und .depend.stopfür 0 1 6.

In meinem Fall habe ich folgende Reihenfolge 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

Sie können auch sehen, warum die Bestellung wie oben dargestellt ist. Jede nächste Zeile sieht folgendermaßen aus:

cgrulesengd: rsyslog cgconfig

was bedeutet , dass cgrulesengdBedürfnisse rsyslog cgconfigder vorherigen gestartet werden.

Mikhail Morfikov
quelle
4

Für jedes Runlevel (0 6) gibt es einen Ordner /etc/rc[N‹.d

In jedem Verzeichnis gibt es symbolische Verknüpfungen, die entweder mit einem "S" oder mit einem "K" beginnen. "S" zum Starten und "K" zum Stoppen. Die Skripte werden in einer lexikalischen Sortierweise des Dateinamens ausgeführt , mit anderen Worten, S10script wird zuerst ausgeführt als S20myscript. Zum Beispiel :

Wir haben zwei einfache Skripte, das Skript second.sh muss nach dem Skript fist.sh im aktuellen Runlevel ausgeführt werden.

    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

Was ist mein aktuelles Level?

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

Jetzt brauchen wir einen symbolischen Link, der mit S (N) myScript für das erste und S (N + 1) mysecondScript beginnt:

    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

Wir können das Meldungsprotokoll neu starten und überprüfen:

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

Getestet auf alten Centos5

Sirà
quelle
Ich empfehle, / usr / bin / logger zum Anhängen des Systemprotokolls anstelle der Umleitung zu verwenden, damit Sie eines Tages nicht versehentlich ">" schreiben und Ihre Protokolle löschen.
DanB