Il comando insserv viene utilizzato per controllare l'ordine di avvio e arresto dei servizi che si trovano su un sistema Linux.
Abilita uno script di inizializzazione del sistema installato (script di avvio) leggendo l'intestazione del commento dello script di inizializzazione e calcolando le dipendenze tra tutti gli script.
Insserv ricerca le funzionalità di sistema nel file di configurazione /etc/insserv.conf e nella directory /etc/insserv.conf.d.
1. init.d Formato intestazione script
Tutti gli script nella directory /etc/init.d dovrebbero avere un'intestazione come quella di seguito. Anche se le righe sono commentate (come sotto) nella sezione dell'intestazione di ogni script, insserv dovrebbe comunque essere in grado di leggere tutte queste righe e abilitare tutti gli script di inizializzazione di conseguenza.
Nell'esempio seguente, la riga che inizia con "# Required-Start:$local_fs boot.localnet" consente a insserv di eseguire/verificare lo script $local_fs e gli script boot.localnet prima che lo script boot.kdump possa essere eseguito.
Allo stesso modo, le righe "# Required-Stop:$local_fs boot.localnet" consentono a insserv di interrompere i servizi prima che questo script venga eseguito.
Se non conosci gli script di inizializzazione, dovresti capire come scrivere script di inizializzazione personalizzati basati su LSB Init Standard.
# cat boot.kdump #!/bin/bash # # Copyright 2005 Red Hat, Inc. # Author: Jeff Moyer <[email protected]> ### BEGIN INIT INFO # Provides: boot.kdump # Required-Start: $local_fs boot.localnet # Should-Start: # Should-Stop: # Required-Stop: $local_fs boot.localnet # Default-Start: B # Default-Stop: # Short-Description: kdump boot configuration # Description: This script loads the kdump kernel on startup. ### END INIT INFO . /etc/sysconfig/kdump . /etc/rc.status
2. Formato file insserv.conf
Quello che segue è un esempio di /etc/insserv.conf, che è il file di configurazione utilizzato dal comando insserv.
# cat /etc/insserv.conf # All local filesystems are mounted (done during boot phase) $local_fs boot.localfs +boot.crypto # Low level networking (ethernet card) $network network # Named is operational $named +named +dnsmasq +lwresd $network # All remote filesystems are mounted (note in some cases /usr may # be remote. Most applications that care will probably require # both $local_fs and $remote_fs) $remote_fs $local_fs +nfs +smbfs # System logger is operational $syslog syslog # SunRPC portmapper available $portmap portmap # The system time has been set correctly $time boot.clock +xntpd # Services which need to be interactive <interactive> apache apache2 boot.clock boot.crypto boot.crypto-early boot.localfs boot.rootfsck kbd kdump ntp
Nel file di configurazione sopra:
- $network è uno pseudo nome che fa riferimento allo script /etc/init.d/network.
- Allo stesso modo vedrai lo pseudo nome di ogni script in /etc/insserv.conf. Questi sono gli pseudo nomi che verranno utilizzati nella sezione dell'intestazione dello script di avvio.
- Ogni riga che inizia con $ e un nome successivo definisce una struttura di sistema in base alla Linux Standard Base Specification (LSB)
- Tutti i nomi seguiti da tale struttura di sistema dichiareranno le dipendenze richieste della struttura.
- Se è disponibile il servizio con il nome dopo il segno più, verrà utilizzato. Se non è disponibile, viene ignorato silenziosamente.
- Le parole che iniziano con
sono parole chiave. - Attualmente
è l'unica parola chiave conosciuta per contrassegnare un servizio come interattivo, ad es. un servizio che richiede l'immissione di una passphrase o di una password durante l'avvio o la modifica del runlevel.
3. Aggiungi un servizio
Ecco un esempio su come aggiungere un semplice servizio utilizzando l'utilità insserv.
Innanzitutto, verifica che il file eseguibile si trovi nella directory /etc/init.d.
# ls -l /etc/init.d/joystick -rwxr-xr-x 1 root root 2296 May 5 2010 /etc/init.d/joystick
Quindi, esegui il comando insserv per abilitare il servizio joystick.
# insserv joystick
Dopo il comando insserv sopra, esegui chkconfig per verificare che sia stato aggiunto all'elenco di avvio.
# chkconfig --list | grep joystick joystick 0:off 1:off 2:on 3:on 4:off 5:on 6:off
Si noti che quanto sopra è un esempio molto semplice senza dipendenze. Ma il potere di insserv è dove risolverà automaticamente e aggiungerà tutti gli script dipendenti appropriati.
4. Eseguire il test di esecuzione
Per eseguire il funzionamento a secco senza abilitare nessuno dei servizi, utilizzare il flag -n come mostrato di seguito.
# insserv –n insserv: Loading ypserv insserv: Loading /etc/insserv/overrides/ypserv insserv: Loading network insserv: Loading /etc/insserv/overrides/network insserv: Loading aaeventd insserv: Loading /etc/insserv/overrides/aaeventd insserv: Loading ntp insserv: Loading hawk insserv: Loading /etc/insserv/overrides/hawk insserv: Loading fetchmail insserv: Loading /etc/insserv/overrides/fetchmail insserv: Loading boot.cycle insserv: Loading /etc/insserv/overrides/boot.cycle insserv: Loading autoyast .. ..
5. Rimuovere un servizio
Usa l'opzione -r come mostrato di seguito per rimuovere un servizio.
# insserv -r joystick
Dopo aver rimosso un servizio, non lo vedrai nell'output di chkconfig.
# chkconfig --list | grep joystick
6. Usa il livello di esecuzione predefinito
Per utilizzare i livelli di esecuzione predefiniti definiti negli script, utilizzare l'opzione -d. Se hai modificato uno schema di collegamento a livello di esecuzione, questo potrebbe ripristinare tali modifiche.
# insserv –d
Per utilizzare i livelli di esecuzione predefiniti definiti negli script, utilizzare l'opzione –d. Nell'esempio seguente, insserv utilizzerà il livello di esecuzione definito nello script invece di eseguire lo script dal livello di esecuzione definito dal sistema o dall'utente.
# insserv –d <script name> # insserv -d /etc/init.d/lighttpd # chkconfig --list | grep lighttpd lighttpd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
7. Forza l'esecuzione del servizio
Per forzare l'esecuzione ignorando il servizio richiesto, utilizzare l'opzione -f come mostrato di seguito.
# insserv –f
Per forzare il sistema a ignorare gli altri servizi richiesti o gli script dipendenti, utilizzare l'opzione –f. Nell'esempio seguente, per eseguire lo script /etc/init.d/openhpid, è necessario avviare prima altre dipendenze come network, remote ,syslog services.
# more /etc/init.d/openhpid #! /bin/sh # ### BEGIN INIT INFO # Provides: openhpid # Required-Start: $network $remote_fs $syslog # Required-Stop: $network $remote_fs $syslog # Should-Start: $named # Should-Stop: $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start OpenHPI daemon at boot time # Description: Enable OpenHPI service which is provided by openhpid. ### END INIT INFO
È possibile forzare il sistema a eseguire lo script /etc/init.d/openhpid ignorando lo stato dei servizi di rete, remoti e syslog utilizzando il comando insserv come mostrato di seguito:
# insserv -f /etc/init.d/openhpid
Inoltre, puoi utilizzare l'opzione -v insieme a uno qualsiasi degli output precedenti per vedere maggiori dettagli su ciò che sta facendo il comando.
# insserv –dv
8. Modifica la directory degli script
Come puoi vedere da tutti gli esempi precedenti, lo script è posizionato nella directory /etc/init.d per impostazione predefinita. Se vuoi che insserv utilizzi una directory diversa per lo script, usa l'opzione -p.
Ad esempio, quanto segue utilizzerà la directory /etc/init.d.custom come posizione dello script.
# insserv –p /etc/init.d.cusom
9. Inserisci il file di configurazione personalizzato
Per specificare il percorso del file di configurazione utilizzare l'opzione -c. Viene utilizzato sia per il file insserv.conf che per la directory insserv.conf.d.
# insserv –c <config file>
Diciamo ad esempio che si desidera utilizzare un percorso diverso per il file di configurazione anziché /etc/insserv.conf, quindi è possibile utilizzare il comando come mostrato nell'esempio seguente.
Ciò è molto utile quando si desidera apportare modifiche al file /etc/insserv.conf ed eseguire procedure di prova (-n) a scopo di convalida. Eseguire il backup del file originale, modificarlo con le modifiche necessarie e quindi puntare alla nuova posizione.
Al termine di tutti i test, puoi eseguire lo stesso comando per ripristinare il file di configurazione originale o utilizzare la nuova posizione.
# insserv -c /var/tmp/insserv_karthik.conf
10. Insserv Override e file correlati
Per sovrascrivere il percorso per sostituire /etc/insserv/overrides, utilizzare la seguente opzione.
Per impostazione predefinita, le intestazioni dei commenti LSB che si trovano nella directory predefinita /etc/insserv/overrides sovrascriveranno le intestazioni dei commenti LSB per gli script che si trovano sotto la directory /etc/init.d.
Ma, se vuoi specificare la tua directory di override, usa l'opzione -o. Quanto segue definisce /etc/insserv/my.overrides come directory di sostituzione.
# insserv –o /etc/insserv/my.overrides
Per sovrascrivere o sostituire le intestazioni dei commenti LSB con i nuovi commenti, puoi creare un file con le nuove intestazioni nel percorso specifico e indicare a insserv di cercare un nuovo file invece di cercare i commenti definiti nello script originale.
Nell'esempio seguente, /etc/init.d/splash è uno script che contiene i seguenti commenti LSB, questi commenti vengono utilizzati per determinare quali servizi devono essere avviati o arrestati per primi.
# more /etc/init.d/splash #! /bin/bash # Copyright (c) 1995-2000 SuSE GmbH Nuernberg, Germany. # # Author: Michael Schroeder <[email protected]> # # /etc/init.d/splash # /usr/sbin/rcsplash # # System startup script for console splash screens # ### BEGIN INIT INFO # Provides: splash # Required-Start: $remote_fs # Should-Start: fbset # Required-Stop: $remote_fs # Should-Stop: fbset # Default-Start: 1 2 3 5 S # Default-Stop: # Description: Splash screen setup ### END INIT INFO
Se non si desidera utilizzare i commenti LSB sopra e non si desidera modificare lo script esistente, è possibile copiare il file nella directory /etc/insserv/overrides ed eseguire il comando insserv seguente per dire al sistema di utilizzare lo script definito nella directory di sostituzione,
insserv -o splash
Non è necessario specificare la posizione della directory di override poiché il percorso predefinito è /etc/insserv/overrides. Puoi anche eseguire insserv dry-run (-n) per verificare come viene eseguito lo script.
Di seguito sono riportati i vari file che verranno elaborati dal comando insserv:
- /etc/insserv.conf – File di configurazione per insserv che definisce le strutture del sistema LSB.
- /etc/insserv.conf.d/ – Directory per ulteriori file di configurazione per la dichiarazione delle strutture del sistema LSB.
- /etc/insserv/overrides/ – Percorso per sostituire le intestazioni dei commenti LSB esistenti con le intestazioni dei commenti trovate in questo percorso.
- /etc/init.d/ – Percorso della directory di base dello script init SuSE come richiesto dalla Linux Standard Base Specification (LSB)