Jak sprawdzić, w jakiej kolejności skrypty /etc/init.d są ładowane w Debianie?

13

Chcę uruchomić jeden skrypt sysvinit przed drugim i wymyślić, jak to zrobić.

Aby mieć pewność, że dzieje się tak w kolejności, w jakiej mi się podoba, chciałbym zobaczyć listę w takiej kolejności.

Znalazłem sudo insserv --showalljuż, ale nie mogę tego zrobić, ponieważ zawiera wiele skryptów inicjujących.

Jak sprawdzić, w jakiej kolejności skrypty /etc/init.d są ładowane w Debianie?

adrelanos
źródło
Użytkownicy BusyBox przybywający na ten post: unix.stackexchange.com/questions/59018/… Uwaga na komentarz „wykonywanie ich w kolejności numerycznej”
dtmland

Odpowiedzi:

9

W katalogu /etc/init.d/ znajduje się kilka plików:

$ 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

Po każdym uruchomieniu update-rc.dpliki się zmienią. .depend.bootplik jest dla Spoziomu, .depend.startdla 2 3 4 5poziomów i .depend.stopdla 0 1 6.

W moim przypadku mam następującą kolejność .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

Możesz także zobaczyć, dlaczego zamówienie przedstawia się tak, jak powyżej. Każda kolejna linia wygląda następująco:

cgrulesengd: rsyslog cgconfig

co oznacza, że cgrulesengdpotrzeby rsyslog cgconfignależy rozpocząć przed.

Michaił Morfikow
źródło
4

Dla każdego poziomu pracy (0 6) jest folder /etc/rc[N].d

W każdym katalogu znajduje się dowiązanie symboliczne, które zaczyna się od „S” lub od „K”. „S”, aby rozpocząć e „K”, aby zatrzymać. Skrypty są wykonywane w sposób uporządkowany leksykalnie z nazwą pliku , innymi słowy S10script zostanie wykonany jako pierwszy niż S20myscript. Na przykład :

mamy dwa proste skrypty, skrypt second.sh musi zostać wykonany po skrypcie fist.sh na bieżącym poziomie działania.

    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

Jaki jest mój obecny poziom?

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

Teraz potrzebujemy dowiązania symbolicznego rozpoczynającego się od S (N) myScript dla pierwszego i 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

Możemy zrestartować komputer i sprawdzić dziennik wiadomości:

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

Testowany na starym Centos5

Sirà
źródło
Zalecam użycie / usr / bin / logger, aby dołączyć do dziennika systemowego zamiast przekierowania, abyś przez przypadek nie napisał przypadkowo „>” i usunął dzienniki.
DanB