GNU/Linux >> LINUX-Kenntnisse >  >> Linux

10 insserv-Befehlsbeispiele für Linux-System-Init-Skripte

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

Linux
  1. Linux-Killall-Befehl für Anfänger (8 Beispiele)

  2. Befehl zum Herunterfahren von Linux (mit Beispielen)

  3. „shutdown“-Befehlsbeispiele in Linux

  4. resize2fs-Befehlsbeispiele in Linux

  5. localectl-Befehlsbeispiele in Linux

Linux ss Command Tutorial für Anfänger (8 Beispiele)

Linux-Verfügbarkeitsbefehl für Anfänger mit Beispielen erklärt

Linux-Suchbefehl für Anfänger (8 Beispiele)

16 praktische Beispiele für Linux LS-Befehle für Anfänger

Linux-mv-Befehl für Anfänger erklärt (8 Beispiele)

Linux-Verfügbarkeitsbefehl mit Beispielen