init Prozess


Der „/sbin/init“ Prozess ist das erste Programm, das der Kernel startet. Init besitzt immer die Prozess-ID 1. Die Hauptaufgabe von „init“ ist das starten von Prozessen aus der Datei /etc/inittab, die auch die Hauptkonfigurationsdatei von init darstellt, dort sieht init zuerst nach, ob es einen „initdefault“ Eintrag gibt, der den Standard Runlevel des Systems bestimmt. Diese Datei hat Einträge um auf jeder Leitung gettys zu erzeugen, auf der sich Nutzer einloggen können. Außerdem werden alle unabhängigen Prozesse gesteuert, die vom System benötigt werden z.B. mounten von Dateisystemen und Dämonen. Beim Herunterfahren ist „init“ ebenfalls der letzte Prozess, der alle noch laufenden Prozesse beendet.

Beim ersten Eintritt in den Mehrbenutzermodus führt „init“, „boot“ und „bootwait“ Einträge aus, die das einhängen von Dateisystemen erlauben, bevor sich Nutzer anmelden können. Danach werden alle Einträge, die zum Runlevel passen verarbeitet.

Wird ein neuer Prozess gestartet, überprüft „init“ zuerst, ob ein initscript existiert. Ist dies der Fall benutzt es dieses Script um den Prozess zu starten.

Wird ein Kindprozess beendet, protokolliert init den Zustand und den Grund der Beendigung in die Dateien „/var/run/utmp“ und „/var/log/wtmp“, sofern diese Dateien existieren.




Die Runlevel des Systems steuern Gruppen von Prozessen, denen es erlaubt ist zu starten oder zu stoppen. Die Prozesse, die von init für jeden Runlevel erzeugt werden sind in der Datei „/etc/inittab“ definiert.



Standard Runlevel


Der Standardrunlevel wird in der Zeile „initdefault“ festgelegt. Dieser bestimmt dann ob das System im Textmodus oder im Grafischen X-Windows System startet. Bei den meisten Linux Systemen wird X in Runlevel 5 gestartet, bei Debian ist es Runlevel 2.

# The default runlevel.
id:2:initdefault:

Standard Runlevel in der Datei „/etc/inittab“ eines Debian Systems.


id:5:initdefault:

Standard Runlevel mit X eines Red Hat Systems.


Bei Debian Systemen mit installierten Display Manager (gdm, kdm oder xdm) wird X automatisch in den Runleveln 2-5 gestartet. Will man ein Debian System dennoch im Textmodus starten, muß man die Start|Stop Links des Display Managers aus den „/etc/rc*.d“ Dateien entfernen.

root@home:~# update-rc.d -f gdm3 remove



root@home:~# update-rc.d gdm3 stop 1  0 1 2 3 4 5 6 .

Hier wird zuerst das löschen aller Start|Stop Links vom Display Manager erzwungen (-f). Danach werden für gdm Stop Links in allen Runlevel eingerichtet.



System Runlevel


Die verfügbaren Runlevel der Linux Systeme.

  • runlevel 0 ⇒ System halt (Do not use this for initdefault!)
  • runlevel 1 ⇒ Single user mode
  • runlevel 2 ⇒ Local multiuser without remote network (e.g. NFS)
  • runlevel 3 ⇒ Full multiuser with network
  • runlevel 4 ⇒ Not used
  • runlevel 5 ⇒ Full multiuser with network and xdm
  • runlevel 6 ⇒ System reboot (Do not use this for initdefault!)



Der Einzelbenutzemodus Runlevel 1 dient dazu, um Wartungsarbeiten am System als Administrator(root) durchzuführen, dabei werden alle anderen angemeldeten Nutzer vom System getrennt.

Ein Runlevelwechsel vom Einzelbenutzermodus 1 zu einem Mehrbenutzermodus 2-5 setzt bei manchen Distributionen einen Neustart voraus um alle Dienste zu starten.



Debian geht hier eigene Wege. Hier sind die Runlevel 2-5 gleich.

Auszüge aus einer Debian /etc/inittab:

# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.

Der Runlevel S wird bei Debian dazu benutzt um das System beim Start zu initialisieren. Danach tritt das System automatisch in die Mehrbenutzer Runlevel 2-5 ein.

Die Runlevel 7-9 sind ebenfalls gültig, jedoch nicht dokumentiert, da sie von traditionellen Unix Systemen nicht genutzt werden.






Aktuellen Runlevel anzeigen


Mit dem Befehl „runlevel“ liest das System den aktuellen Runlevel über die Binärdatei „/var/run/utmp“ aus.

root@home:~# runlevel
N 2

Gibt den aktuellen Runlevel in der zweiten Spalte aus. Wurde der Runlevel gewechselt, wird der letzte Runlevel in der ersten Spalte ausgegeben.



Runlevel wechseln


Beim Runlevel wechsel überprüft das „rc“ Script ob es für die Scriptfunktionen einen Start oder Stopp Link gibt, denn es werden nur Funktionen gestoppt, die im folgenden Runlevel nicht gebraucht werden.


Beispiele:

root@home:~# init 3

Runlevel wechseln.


root@home:~# telinit 3

Das Kommando „/sbin/telinit“ ist mit „/sbin/init“ verknüpft. Telinit kann man Argumente mitgeben, die init Signale sendet um Aktionen durchzuführen.


Syntax:

  • telinit [opt] [args]



Optionen:

  • 0-6 ⇒ In den angegebenen Runlevel wechseln.
  • Q|q ⇒ Die Datei /etc/inittab erneut einlesen.
  • S|s ⇒ In den Einzelbenutzermodus zu wechseln (Debian).
  • -e [VAR=WERT]|[VAR] ⇒ Weist init an die Umgebung für Prozesse zu ändern. VAR=WERT setzt eine Variable. VAR leert die Variable.






Beim Systemstart steuert die Datei „/etc/inittab“ den init Prozess. Für Einträge in dieser Datei gilt folgendes Format:

id:runlevels:action:process

  • id ⇒ Der id Code kann aus 1-4 Zeichen bestehen die den Eintag eindeutig identifizieren. Ältere sysvinit Versionen mit der libc5 < 5.2.18 Bibliothek sind limitiert auf zwei Zeichen.
  • runlevels ⇒ Gibt an, für welchen Runlevel der Eintrag gilt.
  • action ⇒ Enthält die Anweisung für init.
  • process ⇒ Gibt an, welcher Prozess oder welches Kommando ausgeführt werden soll.



Gültige Aktionen für das action Feld:

  • respawn ⇒ Der Prozess startet nach seinem Ende wieder neu.
  • wait ⇒ Der Prozess wird im angegebenen Runlevel einmal gestartet und init wartet auf dass Ende des folgenden Prozesses..
  • once ⇒ Startet den Prozess einmal, wenn in den Runlevel eingetreten wird.
  • boot ⇒ Der Prozess wird beim Systemstart ausgeführt. Runlevels werden ignoriert.
  • bootwait ⇒ Der Prozess wird wärend des Bootvorgangs gestartet und wartet auf das Ende des folgenden Prozesses.
  • ondemand ⇒ Prozess wird in einem ondemand Runlevel ausgeführt. Ondemand Runlevel sind a, b, c.
  • initdefault ⇒ Definiert den Standard Runlevel des Systems.
  • sysinit ⇒ Führt den Prozess einmal wärend des Bootvorganges aus. Runlevel werden ignoriert.
  • powerwait ⇒ Führt den Prozess bei einem Stromausfall aus. init wartet auf den Prozess, bis er beendet wurde.
  • powerfail ⇒ Wie powerwait, jedoch wartet init nicht bis der Prozess beendet wurde.
  • powerokwait ⇒ Dieser Prozess wird ausgeführt, sobald init informiert wird, dass das System wiederhergestellt wurde.
  • ctrlaltdel ⇒ Definiert, wie init auf Strg+Alt+Del reagieren soll.



Beispiel einer Debian inittab:

Anzeigen

Ausblenden

# /etc/inittab: init(8) configuration.
# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $

# The default runlevel.
id:2:initdefault:

# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS

# What to do in single-user mode.
~~:S:wait:/sbin/sulogin

# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normally not reached, but fallthrough in case of emergency.
z6:6:respawn:/sbin/sulogin

# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

# Action on special keypress (ALT-UpArrow).
#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."

# What to do when the power fails/returns.
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop

# /sbin/getty invocations for the runlevels.
#
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
#
# Format:
#  <id>:<runlevels>:<action>:<process>
#
# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more getty's go ahead but skip tty7 if you run X.
#
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

# Example how to put a getty on a serial line (for a terminal)
#
#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100

# Example how to put a getty on a modem line.
#
#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3



Beispiel einer Red Hat inittab:

Anzeigen

Ausblenden

#
# inittab       This file describes how the INIT process should set up
#               the system in a certain run-level.
#
# Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
#               Modified for RHS Linux by Marc Ewing and Donnie Barnes
#

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:5:initdefault:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# When our UPS tells us power has failed, assume we have a few minutes
# of power left.  Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.  
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"


# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon






Bevor die Runleveldienste geladen werden wird eine Systeminitialisierung durchgeführt, diese sind in einer Zeile der „/etc/inittab“ Datei aufgeführt.

Debian si::sysinit:/etc/init.d/rcS
Red Hat si::sysinit:/etc/rc.d/rc.sysinit
SuSe si::sysinit:/etc/init.d/boot



Initialisiert werden hierdurch:

  • Systemvariablen.
  • Domain und Hostname.
  • Dateisystem /proc wird aktiviert.
  • Datum und Zeit einstellen.
  • Tastatur und Textkonsole einstellen.
  • udev System starten.
  • RAID u. LVM aktivieren.
  • Dateisysteme prüfen.
  • Root Partition im read-write Modus neu einbinden.
  • Partitionen einbinden.
  • Netzwerkfunktionen initialisieren (nur Debian).






Nachdem die Systeminitialisierung abgeschlossen ist, kann das System im Standard Runlevel starten. Die Script Dateien befinden sich je nach Distribution in „/etc/init.d“ (Debian ) oder „/etc/rc.d/init.d/“ (Red Hat ). Für die Runlevel existieren die Verzeichnisse „rc0.d“ - „rc6.d“, in denen sich Symbolische Links mit vorangestellten „K“ (Kill) oder „S“ (Start) gefolgt von einer Nummer für die Ausführungsreihenfolge befinden, die auf die jeweiligen init Scripte verweisen. An rc wird der aktuelle Runlevel übergeben und führt zunächst alle im Verzeichnis rc*.d „Kill“ Script Dateien zum beenden, danach alle „Start“ Script Dateien zum starten der Prozesse aus.

drwxr-xr-x  2 root root    4096 29. Okt 18:52 rc0.d
drwxr-xr-x  2 root root    4096 29. Okt 18:52 rc1.d
drwxr-xr-x  2 root root    4096 20. Nov 05:50 rc2.d
drwxr-xr-x  2 root root    4096 20. Nov 05:50 rc3.d
drwxr-xr-x  2 root root    4096 20. Nov 05:50 rc4.d
drwxr-xr-x  2 root root    4096 20. Nov 05:50 rc5.d
drwxr-xr-x  2 root root    4096 29. Okt 18:52 rc6.d
-rwxr-xr-x  1 root root     329  8. Okt 21:08 rc.local
drwxr-xr-x  2 root root    4096 14. Sep 23:05 rcS.d

Das Verzeichnis rcS.d ist Debian spezifisch und wird bei der System initialisierung eingelesen. Die Datei rc.local wird von init zuletzt verarbeitet und kann zum starten eigener Scripte verwendet werden.


Beispiel /etc/rc2.d Debian :

...
lrwxrwxrwx 1 root root  14  4. Jan 2010  S18cron -> ../init.d/cron
lrwxrwxrwx 1 root root  14  4. Jan 2010  S18dbus -> ../init.d/dbus
lrwxrwxrwx 1 root root  15  4. Jan 2010  S18exim4 -> ../init.d/exim4
lrwxrwxrwx 1 root root  20  4. Jan 2010  S18kerneloops -> ../init.d/kerneloops
lrwxrwxrwx 1 root root  21  4. Jan 2010  S18loadcpufreq -> ../init.d/loadcpufreq
lrwxrwxrwx 1 root root  13 20. Nov 05:50 S18ntp -> ../init.d/ntp
...


Beispiel /etc/rc0.d Debian :

lrwxrwxrwx 1 root root  15  4. Jan 2010  K01exim4 -> ../init.d/exim4
lrwxrwxrwx 1 root root  14  4. Jan 2010  K01fuse -> ../init.d/fuse
lrwxrwxrwx 1 root root  14  4. Jan 2010  K01gdm3 -> ../init.d/gdm3
lrwxrwxrwx 1 root root  20  4. Jan 2010  K01kerneloops -> ../init.d/kerneloops
lrwxrwxrwx 1 root root  25  4. Jan 2010  K01network-manager -> ../init.d/network-manager






Möchte man bestimmte Dienste automatisch im gewünschten Runlevel starten, müssen die entsprechenden Links erstellt werden. Um zu verhindern, dass ein Dienst automatisch startet, entfernt man den Link. Dies kann man entweder manuell erledigen oder man benutzt die Kommandos der Distibutionen.


Beispiel Apache Webserver mit Red Hat :

[root@home ~]# cd /etc/rc.d
[root@home rc.d]# ln -s init.d/httpd rc0.d/K15httpd
[root@home rc.d]# ln -s init.d/httpd rc1.d/K15httpd
[root@home rc.d]# ln -s init.d/httpd rc2.d/K15httpd
[root@home rc.d]# ln -s init.d/httpd rc3.d/S40httpd
[root@home rc.d]# ln -s init.d/httpd rc5.d/K15httpd
[root@home rc.d]# ln -s init.d/httpd rc6.d/K15httpd

Hier wird der Apache Webserver automatisch im Runlevel 3 gestartet, in allen anderen Runleveln ist der automatische Start deaktiviert. Hierbei ist noch zu beachten, dass der Webserver mit der Prioritätsnummer 40 nach dem Netzwerk startet.

Je nach Distribution existieren Kommandos, die das Einrichhten der Start|Stop Links vereinfachen.

Verwendet man Kommandos zum Einrichten der Start|Stop Links, die Kommentare zum Start, Stop, Provides und Requires benötigen sollte man sicherstellen, dass diese in den init Scripten vorhanden sind, andernfalls sollten die Benötigten Daten über die Optionen der Kommandos vorher erstellt werden. (Siehe Aufbau von init Script Dateien).





Red Hat


Symbolische Links für Dienste unter Red Hat Systeme verwalten mit „chkconfig“. Wird chkconfig nur mit einem Dienstnamen ohne Optionen aufgerufen, überprüft chkconfig ob der Dienst im aktuellen Runlevel gestartet werden kann.


Syntax:

  • chkconfig [opt] [name] [arg]



Optionen:

  • --list [name] ⇒ Zeigt an, in welchen Runlevel der entsprechende Dienst aktiviert oder deaktiviert ist.
  • --add [name] ⇒ Fügt einen Dienst zum bearbeiten mit chkconfig hinzu und überprüft ob in allen Runleveln Start|Stop Links existieren, fehlt ein Link wird dieser nach den Standardeinstellungen im init Script erzeugt.
  • --del [name] ⇒ Löscht sämtliche symbolische Links des Dienstes aus den Verzeichnissen rc[0-6].d.
  • --on ⇒ Prüft den Service und generiert Softlinks.
  • --off ⇒ Entfernt Softlinks zu den verwalteten Diensten.
  • --level [levels] [name] ⇒ Setzt start Links der angegebenen Runlevel. Beispiel: levels 35 setzt Startlinks für die Runlevel 3 und 5.
  • --level [levels] [name] [on|off|reset] ⇒ Startet|Stoppt den Dienst im ausgewählten Runlevel oder setzt diesen zurück.



Beispiele:

[root@home ~]# chkconfig --add httpd


[root@home ~]# chkconfig --list httpd
httpd          	0:Aus	1:Aus	2:Aus	3:Aus	4:Aus	5:Aus	6:Aus


[root@home ~]# chkconfig --level 35 httpd on
[root@home ~]# chkconfig --list httpd
httpd          	0:Aus	1:Aus	2:Aus	3:Ein	4:Aus	5:Ein	6:Aus




Red Hat init Scripte manuell starten/stoppen:

/etc/init.d/httpd start|stop|restart|reload|status


service httpd start|stop|restart|reload|status

Für beide Schreibweisen für init Scripte sind nicht immer alle Optionen verfügbar.

Red Hat init Konfigurationsdateien
Systeminitialisierung /etc/rc.d/rcsysconfig
Init-Scripte /etc/rc.d/init.d/*
Runlevel Links /etc/rc.d/rc*.d/*
Konfigurationsdateien /etc/sysconfig/*





Debian


Mit „update-rc.d“ lassen sich Runlevel Links in Debian verwalten.


Syntax:

  • update-rc.d [dienst] [opt] [args.]



Optionen:

  • defaults ⇒ Erzeugt die Standard Start|Stopp links des Dienstes.
  • defaults [runlevels .] ⇒ Erzeugt die Standard Start|Stopp links des Dienstes.
  • disable ⇒ Verhindert automatischen Start des Dienstes. Alle Startlinks (S) werden in Stoplinks (K) umgewandelt.
  • enable ⇒ Setzt beim deaktivierten Dienst die Startlinks wieder auf (S).
  • remove -f ⇒ Löscht Start|Stop links aus dem Verzeichnis.


Mit update-rc.d kann man vorhandene Links nicht verändern, diese müssen zuvor entweder manuell oder mit remove -f (force) gelöscht werden.



Zum entfernen aller Start|Stop Links für einen Dienst kann man folgendes Kommando verwenden.

root@home:~# update-rc.d -f apache2 remove

Entfernt alle Start und Stop Links des Webservers. Ohne die Option -f (force) müssen die Links erst manuell gelöscht werden.


Zum erstellen von Start|Stop Links für einen Dienst können folgende Kommandos verwendet werden.

root@home:~# update-rc.d apache2 defaults 18 1

Definiert in den Runleveln 2-5 Links zum start und stoppen 0, 1, 6 als Default Wert. Linknamen beginnen fortlaufend mit einer Zahl, die die Prozess Priorität darstellt und nacheinander abgearbeitet werden. Im Beispiel wird der Webserver mit der Priorität 18 gestartet und mit 1 gestoppt. Bei Debian Systemen ist es möglich init Scripte mit der gleichen Prozess Priorität paralell zu starten.


Es können aber auch Start|Stop Links inividuell für jeden Runlevel definiert werden, hierzu übergibt man die Start|Stop Argumente für jeden Runlevel. Eine Argumentgruppe wird immer mit einem Punkt abgeschlossen.

root@home:~# update-rc.d apache2 start 18 2 3 4 5 . stop 1 0 1 6 .



Debian init Scripte manuell starten/stoppen:

/etc/init.d/apache2 start|stop|restart|reload|status


invoke.rc apache2 start|stop|restart|reload|status

Für beide Schreibweisen sind für init Scripte nicht immer alle Optionen verfügbar.

Debian init Konfigurationsdateien
Systeminitialisierung /etc/init.d/rcS , /etc/rcS.d/*
Init-Scripte /etc/init.d/*
Runlevel Links /etc/rc*.d/*
Konfigurationsdateien /etc/default/*





SuSE


Mit „insserv“ lassen sich Runlevel Links unter SuSE verwalten. Mit insserv werden die Start|Stop, sowie die Provides und Requires Kommentare des init Scripts ausgewertet. Falls notwendig werden auch vorhandene Links neu nummeriert. Es wird jedoch nicht empfohlen, die Links manuell zu bearbeiten.


Syntax:

  • insserv [opt] [name]



Optionen:

  • -r [name] ⇒ Start|Stop Link entfernen.



Beispiele:

root # insserv httpd

Erstellt Start|Stop Links für den Webserver.


root # insserv -r httpd

Hebt die Verlinkung wieder auf.


SuSE init Scripte manuell starten/stoppen:

/etc/init.d/httpd start|stop|restart|reload|status


rchttpd start|stop|restart|reload|status

Für beide Schreibweisen für init Scripte sind nicht immer alle Optionen verfügbar.

SuSE init Konfigurationsdateien
Systeminitialisierung /etc/init.d/boot, /etc/init.d/boot.d/*
Init-Scripte /etc/rc.d/init/*
Runlevel Links /etc/rc.d/rc*.d/*
Konfigurationsdateien /etc/sysconfig/*






Mit der Datei „/etc/rc.local“ (Debian ) oder „/etc/rc.d/rc.local“ (Red Hat ) kann man dem init-Prozess selbst geschriebene oder speziell angepasste Scripte hinzufügen. Dieses Script wird erst nach allen anderen init Scripten einmal ausgeführt, sobald das System im Runlevel 2, 3, 4 oder 5 gestartet wird. Hier kann der Pfad zu den Scripten zeilenweise untereinander eingetragen werden.


Beispiel /etc/rc.local:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/usr/local/bin/myscript1.sh
/usr/local/sbin/myscript2.sh
exit 0







Beispiel Debian /etc/init.d/ntp:

Anzeigen

Ausblenden

#!/bin/sh

### BEGIN INIT INFO
# Provides:        ntp
# Required-Start:  $network $remote_fs $syslog
# Required-Stop:   $network $remote_fs $syslog
# Default-Start:   2 3 4 5
# Default-Stop: 
# Short-Description: Start NTP daemon
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin

. /lib/lsb/init-functions

DAEMON=/usr/sbin/ntpd
PIDFILE=/var/run/ntpd.pid

test -x $DAEMON || exit 5

if [ -r /etc/default/ntp ]; then
        . /etc/default/ntp
fi

if [ -e /var/lib/ntp/ntp.conf.dhcp ]; then
        NTPD_OPTS="$NTPD_OPTS -c /var/lib/ntp/ntp.conf.dhcp"
fi


LOCKFILE=/var/lock/ntpdate

lock_ntpdate() {
        if [ -x /usr/bin/lockfile-create ]; then
                lockfile-create $LOCKFILE
                lockfile-touch $LOCKFILE &
                LOCKTOUCHPID="$!"
        fi
}

unlock_ntpdate() {
        if [ -x /usr/bin/lockfile-create ] ; then
                kill $LOCKTOUCHPID
                lockfile-remove $LOCKFILE
        fi
}

RUNASUSER=ntp
UGID=$(getent passwd $RUNASUSER | cut -f 3,4 -d:) || true
if test "$(uname -s)" = "Linux"; then
        NTPD_OPTS="$NTPD_OPTS -u $UGID"
fi

case $1 in
        start)
                log_daemon_msg "Starting NTP server" "ntpd"
                if [ -z "$UGID" ]; then
                        log_failure_msg "user \"$RUNASUSER\" does not exist"
                        exit 1
                fi
                lock_ntpdate
                start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --startas $DAEMON -- -p $PIDFILE $NTPD_OPTS
                status=$?
                unlock_ntpdate
                log_end_msg $status
                ;;
        stop)
                log_daemon_msg "Stopping NTP server" "ntpd"
                start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
                log_end_msg $?
                rm -f $PIDFILE
                ;;
        restart|force-reload)
                $0 stop && sleep 2 && $0 start
                ;;
        try-restart)
                if $0 status >/dev/null; then
                        $0 restart
                else
                        exit 0
                fi
                ;;
        reload)
                exit 3
                ;;
        status)
                status_of_proc $DAEMON "NTP server"
                ;;
        *)
                echo "Usage: $0 {start|stop|restart|try-restart|force-reload|status}"
                exit 2
                ;;
esac



Beispiel Red Hat /etc/rc.d/init.d/portmap:

Anzeigen

Ausblenden

#! /bin/sh
#
# portmap       Start/Stop RPC portmapper
#
# chkconfig: 345 13 87
# description: The portmapper manages RPC connections, which are used by \
#              protocols such as NFS and NIS. The portmap server must be \
#              running on machines which act as servers for protocols which \
#              make use of the RPC mechanism.
# processname: portmap


# This is an interactive program, we need the current locale
[ -f /etc/profile.d/lang.sh ] && . /etc/profile.d/lang.sh
# We can't Japanese on normal console at boot time, so force LANG=C.
if [ "$LANG" = "ja" -o "$LANG" = "ja_JP.eucJP" ]; then
    if [ "$TERM" = "linux" ] ; then
        LANG=C
    fi
fi

# Source function library.
. /etc/init.d/functions

# Get config.
if [ -f /etc/sysconfig/network ]; then
    . /etc/sysconfig/network
else
    echo $"Networking not configured - exiting"
    exit 1
fi

prog="portmap"

# Check that networking is up.
if [ "$NETWORKING" = "no" ]; then
        exit 0
fi

[ -f /sbin/portmap ] || exit 0

[ -f /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

RETVAL=0

start() {
        echo -n $"Starting $prog: "
        daemon portmap $PMAP_ARGS
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/portmap
        return $RETVAL
}


stop() {
        echo -n $"Stopping $prog: "
        killproc portmap
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/portmap
        return $RETVAL
}

restart() {
        pmap_dump > /var/run/portmap.state
        stop
        start
        pmap_set < /var/run/portmap.state
        rm -f /var/run/portmap.state
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status portmap
        ;;
  restart|reload)
        restart
        ;;
  condrestart)
        [ -f /var/lock/subsys/portmap ] && restart || :
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}"
        exit 1
esac

exit $?





Cloud