Der Befehl insserv wird verwendet, um die Start- und Stoppreihenfolge der Dienste zu steuern, die sich auf einem Linux-System befinden.
Es aktiviert ein installiertes System-Init-Skript (Boot-Skript), indem es den Kommentar-Header des Init-Skripts liest und die Abhängigkeiten zwischen allen Skripten berechnet.
Insserv sucht nach den Systemeinrichtungen in der Konfigurationsdatei /etc/insserv.conf und im Verzeichnis /etc/insserv.conf.d.
1. init.d Skript-Header-Format
Alle Skripte im Verzeichnis /etc/init.d sollten einen Header wie unten haben. Selbst wenn die Zeilen im Header-Abschnitt jedes Skripts auskommentiert sind (wie unten), sollte insserv immer noch in der Lage sein, alle diese Zeilen zu lesen und alle Init-Skripte entsprechend zu aktivieren.
Im folgenden Beispiel ermöglicht die Zeile, die mit „# Required-Start:$local_fs boot.localnet“ beginnt, den insserv, das $local_fs-Skript und die boot.localnet-Skripte auszuführen/zu überprüfen, bevor das boot.kdump-Skript ausgeführt werden kann.
Auf die gleiche Weise ermöglichen die Zeilen „# Required-Stop:$local_fs boot.localnet“ insserv, die Dienste zu stoppen, bevor dieses Skript ausgeführt wird.
Wenn Sie mit Init-Skripten noch nicht vertraut sind, sollten Sie verstehen, wie Sie benutzerdefinierte Init-Skripte basierend auf dem LSB-Init-Standard schreiben können.
# 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. insserv.conf-Dateiformat
Das Folgende ist ein Beispiel für /etc/insserv.conf, die Konfigurationsdatei, die vom insserv-Befehl verwendet wird.
# 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
In der obigen Konfigurationsdatei:
- $network ist ein Pseudoname, der auf das Skript /etc/init.d/network verweist.
- In ähnlicher Weise sehen Sie den Pseudonamen für jedes Skript in /etc/insserv.conf. Dies sind die Pseudonamen, die im Header-Abschnitt des Bootskripts verwendet werden.
- Jede Zeile, die mit $ und einem nachfolgenden Namen beginnt, definiert eine Systemeinrichtung entsprechend der Linux Standard Base Specification (LSB)
- Alle Namen, denen eine solche Systemeinrichtung folgt, deklarieren die erforderlichen Abhängigkeiten der Einrichtung.
- Wenn der Dienst mit dem Namen nach dem Pluszeichen verfügbar ist, wird er verwendet. Wenn es nicht verfügbar ist, wird es stillschweigend ignoriert.
- Wörter, die mit
enden, sind Schlüsselwörter. - Derzeit ist
das einzige bekannte Schlüsselwort, um einen Dienst als interaktiv zu kennzeichnen, z. ein Dienst, der eine Passphrase oder ein Passwort beim Booten oder Wechseln des Runlevels erfordert.
3. Dienst hinzufügen
Hier ist ein Beispiel, wie man einen einfachen Dienst mit dem Dienstprogramm insserv hinzufügt.
Stellen Sie zunächst sicher, dass sich die ausführbare Datei im Verzeichnis /etc/init.d befindet.
# ls -l /etc/init.d/joystick -rwxr-xr-x 1 root root 2296 May 5 2010 /etc/init.d/joystick
Führen Sie als Nächstes den Befehl insserv aus, um den Joystick-Dienst zu aktivieren.
# insserv joystick
Führen Sie nach dem obigen insserv-Befehl chkconfig aus, um zu überprüfen, ob es zur Startliste hinzugefügt wurde.
# chkconfig --list | grep joystick joystick 0:off 1:off 2:on 3:on 4:off 5:on 6:off
Bitte beachten Sie, dass das Obige ein sehr einfaches Beispiel ohne Abhängigkeiten ist. Aber die Stärke von insserv liegt darin, dass es automatisch alle geeigneten abhängigen Skripte auflöst und hinzufügt.
4. Testlauf durchführen
Um einen Probelauf durchzuführen, ohne einen der Dienste zu aktivieren, verwenden Sie das Flag -n wie unten gezeigt.
# 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. Dienst entfernen
Verwenden Sie die Option -r wie unten gezeigt, um einen Dienst zu entfernen.
# insserv -r joystick
Nachdem Sie einen Dienst entfernt haben, sehen Sie ihn nicht in der chkconfig-Ausgabe.
# chkconfig --list | grep joystick
6. Standardausführungsebene verwenden
Um die in den Skripten definierten Standard-Runlevel zu verwenden, verwenden Sie die Option -d. Wenn Sie ein Runlevel-Link-Schema bearbeitet haben, werden diese Änderungen möglicherweise wiederhergestellt.
# insserv –d
Um die in den Skripten definierten Standard-Runlevel zu verwenden, verwenden Sie die Option –d. Im folgenden Beispiel verwendet insserv die im Skript definierte Ausführungsebene, anstatt das Skript von der durch das System oder den Benutzer definierten Ausführungsebene auszuführen.
# 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. Ausführung des Dienstes erzwingen
Um die Ausführung zu erzwingen und den erforderlichen Dienst zu ignorieren, verwenden Sie die Option -f wie unten gezeigt.
# insserv –f
Um das System zu zwingen, die anderen erforderlichen Dienste oder abhängigen Skripte zu ignorieren, verwenden Sie die Option –f. Damit das /etc/init.d/openhpid-Skript im folgenden Beispiel ausgeführt werden kann, müssen zuerst andere Abhängigkeiten wie Netzwerk-, Remote- und Syslog-Dienste gestartet werden.
# 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
Sie können das System dazu zwingen, das Skript /etc/init.d/openhpid auszuführen, wobei der Status von Netzwerk-, Remote- und Syslog-Diensten ignoriert wird, indem Sie den Befehl insserv wie unten gezeigt verwenden:
# insserv -f /etc/init.d/openhpid
Außerdem können Sie die Option -v zusammen mit einer der obigen Ausgaben verwenden, um mehr Details darüber zu sehen, was der Befehl tut.
# insserv –dv
8. Ändern Sie das Skriptverzeichnis
Wie Sie in allen vorherigen Beispielen sehen, wird das Skript standardmäßig im Verzeichnis /etc/init.d abgelegt. Wenn Sie möchten, dass insserv ein anderes Verzeichnis für das Skript verwendet, verwenden Sie die Option -p.
Im Folgenden wird beispielsweise das Verzeichnis /etc/init.d.custom als Skriptspeicherort verwendet.
# insserv –p /etc/init.d.cusom
9. Benutzerdefinierte Konfigurationsdatei von Insserv
Verwenden Sie die Option -c, um den Pfad der Konfigurationsdatei anzugeben. Dies wird sowohl für die Datei insserv.conf als auch für das Verzeichnis insserv.conf.d verwendet.
# insserv –c <config file>
Nehmen wir beispielsweise an, Sie möchten anstelle von /etc/insserv.conf einen anderen Pfad für die Konfigurationsdatei verwenden, dann können Sie den Befehl wie im folgenden Beispiel gezeigt verwenden.
Dies ist sehr hilfreich, wenn Sie Änderungen an der Datei /etc/insserv.conf vornehmen und Probeläufe (-n) zu Validierungszwecken ausführen möchten. Sichern Sie die Originaldatei, ändern Sie sie mit den erforderlichen Änderungen und zeigen Sie dann auf den neuen Speicherort.
Wenn Sie alle Tests abgeschlossen haben, können Sie denselben Befehl ausführen, um zur ursprünglichen Konfigurationsdatei zurückzukehren oder den neuen Speicherort zu verwenden.
# insserv -c /var/tmp/insserv_karthik.conf
10. Insserv Override und zugehörige Dateien
Um den Pfad zum Ersetzen von /etc/insserv/overrides zu überschreiben, verwenden Sie bitte die folgende Option.
Standardmäßig überschreiben LSB-Kommentarheader im Standardverzeichnis /etc/insserv/overrides die LSB-Kommentarheader für die darunter gefundenen Skripte das Verzeichnis /etc/init.d.
Wenn Sie jedoch Ihr eigenes Überschreibungsverzeichnis angeben möchten, verwenden Sie die Option -o. Im Folgenden wird /etc/insserv/my.overrides als Override-Verzeichnis definiert.
# insserv –o /etc/insserv/my.overrides
Um die LSB-Kommentarkopfzeilen zu überschreiben oder durch die neuen Kommentare zu ersetzen, können Sie eine Datei mit den neuen Kopfzeilen im spezifischen Pfad erstellen und insserv anweisen, nach einer neuen Datei zu suchen, anstatt nach Kommentaren zu suchen, die im ursprünglichen Skript definiert sind.
Im folgenden Beispiel ist /etc/init.d/splash ein Skript mit den folgenden LSB-Kommentaren. Diese Kommentare werden verwendet, um zu bestimmen, welche Dienste zuerst gestartet oder gestoppt werden müssen.
# 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
Wenn Sie die obigen LSB-Kommentare nicht verwenden und auch das vorhandene Skript nicht ändern möchten, können Sie die Datei in das Verzeichnis /etc/insserv/overrides kopieren und den folgenden insserv-Befehl ausführen, um das System anzuweisen, das definierte Skript zu verwenden im Override-Verzeichnis
insserv -o splash
Sie müssen den Speicherort des Außerkraftsetzungsverzeichnisses nicht angeben, da der Standardpfad /etc/insserv/overrides ist. Sie können auch insserv dryrun (-n) ausführen, um zu überprüfen, wie das Skript ausgeführt wird.
Im Folgenden sind die verschiedenen Dateien aufgeführt, die vom insserv-Befehl verarbeitet werden:
- /etc/insserv.conf – Konfigurationsdatei für insserv, die die LSB-Systemeinrichtungen definiert.
- /etc/insserv.conf.d/ – Verzeichnis für weitere Konfigurationsdateien zum Deklarieren von LSB-Systemeinrichtungen.
- /etc/insserv/overrides/ – Pfad zum Ersetzen vorhandener LSB-Kommentarheader durch die in diesem Pfad gefundenen Kommentarheader.
- /etc/init.d/ – Pfad zum SuSE-Init-Skript-Basisverzeichnis wie von der Linux Standard Base Specification (LSB) gefordert