Comment savoir dans quel ordre /etc/init.d les scripts sont chargés sur Debian?

13

Je veux exécuter un script sysvinit avant un autre et j'ai compris comment le faire.

Pour être sûr que cela se produit réellement dans l'ordre que j'aime, je voudrais voir une liste, dans quel ordre cela se produit.

J'ai sudo insserv --showalldéjà trouvé , mais je ne peux pas en faire la tête ou la queue, car il répertorie les scripts d'init plusieurs fois.

Comment savoir dans quel ordre /etc/init.d les scripts sont chargés sur Debian?

adrelanos
la source
Utilisateurs BusyBox arrivant à ce message: unix.stackexchange.com/questions/59018/… Notez le commentaire "les exécutant dans l'ordre numérique"
dtmland

Réponses:

9

Il y a quelques fichiers dans le répertoire /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

Chaque fois que vous exécutez update-rc.dles fichiers changeront. .depend.bootle fichier est pour le Sniveau, .depend.startest pour les 2 3 4 5niveaux et .depend.stoppour 0 1 6.

Dans mon cas, j'ai l'ordre suivant .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

Vous pouvez également voir pourquoi la commande se présente comme vous le voyez ci-dessus. Chaque ligne suivante ressemble à ceci:

cgrulesengd: rsyslog cgconfig

ce qui signifie que cela cgrulesengddoit rsyslog cgconfigêtre commencé avant.

Mikhail Morfikov
la source
4

Pour chaque niveau d'exécution (0 6), il existe un dossier /etc/rc[N diplomatique.d

Dans chaque répertoire, il y a un lien symbolique qui commence par un "S" ou par un "K". "S" pour démarrer e "K" pour arrêter. Les scripts sont exécutés d'une manière lexicale du nom de fichier , en d'autres termes S10script sera exécuté en premier lieu que S20myscript. Par exemple :

nous avons deux scripts simples, le script second.sh doit être exécuté après le script fist.sh dans le niveau d'exécution actuel.

    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

Quel est mon niveau actuel?

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

Nous avons maintenant besoin d'un lien symbolique commençant à savoir S (N) myScript pour le premier et 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

Nous pouvons redémarrer et consulter le journal des messages:

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

Testé sur l'ancien Centos5

Sirà
la source
Je recommande d'utiliser / usr / bin / logger pour ajouter au journal système au lieu de la redirection, afin de ne pas accidentellement écrire ">" par accident un jour et d'effacer vos journaux.
DanB