Wie ändere ich die Startreihenfolge von Linux-Diensten?

Antworten:

11

Sie können die Reihenfolge ändern, indem Sie die Symlinks unter /etc/rcX.d/ umbenennen, wobei x Ihr Runlevel ist.

Sie sehen eine Reihe von Dateien, die mit Sxx oder Kxx beginnen. S-Links werden während des Startvorgangs verfolgt, während die K-Links zum Herunterfahren analysiert werden. Das xx steht hier für die Reihenfolge.

Diese Reihenfolge ist jedoch aus einem bestimmten Grund festgelegt. Seien Sie also vorsichtig, wenn Sie sie ändern. ntpd sollte erst nach der Initialisierung des Netzwerksubsystems gestartet werden.

Lumpen
quelle
21

Anstatt es manuell zu tun, wie in den anderen Antworten vorgeschlagen, können Sie auch das Init-Skript ändern. Fügen Sie einfach eine solche Zeile in die Kopfzeile ein:

# chkconfig: 35 90 10

Dadurch wird angewiesen chkconfig, den Dienst den Runleveln 3 und 5 mit einer Startposition von 90 und einer Killposition von 10 hinzuzufügen.

Christian
quelle
Dies. Absolut das. Wenn Sie die Symlinks manuell umbenennen, erhalten Sie eine Überraschung, wenn jemand chkconfig off servicename && chkconfig on servicename
vorbeikommt
Lief wie am Schnürchen. Ich musste Abhängigkeiten zwischen mysqld und einem Servlet-Container konfigurieren. Ich konnte die Startposition von mysqld nicht herausfinden, also habe ich die Startposition des Servlet-Containers auf 99 konfiguriert und es funktioniert einwandfrei. Mysqld wird zuerst gestartet. Vielen Dank.
Jpangamarca
7

Sie möchten ein wenig über Ihre lesen Runlevel- und RCD- Verzeichnisse lesen . In den rc.d-Verzeichnissen finden Sie die S- und K-Links, wie z. B. S20apache K10apache. Dies ist im Grunde genommen der Befehl zum Starten / Herunterfahren von Skripten.

Es werden einige Änderungen an dieser Architektur vorgenommen, die meisten Linux-Systeme verwenden sie jedoch weiterhin.

Core-Dump
quelle
Ich bin erstaunt, dass die meisten Distributionen dieses System noch verwenden. Bessere Systeme rcordergibt es schon länger.
Chris S
Ich bin ein bisschen neidisch auf Solaris svc, könnte aber auf das XML-Zeug verzichten
coredump
Das ist genau richtig. Abhängig von Ihrer Distribution haben Sie jedoch möglicherweise verschiedene Möglichkeiten, diesen Wert zu ändern. Lesen Sie daher die spezifische Dokumentation für Ihre Distribution.
Andrew M.
1
Einige Distributionen wie Ubuntu verwenden Upstart ( Wikipedia ).
Bis auf weiteres angehalten.
7

Wenn Sie hier angekommen sind, haben Sie wahrscheinlich zwei Dienste, bei denen einer vom anderen abhängt. Da der Start jedoch in der falschen Reihenfolge erfolgt, kann der mit der Abhängigkeit nicht gestartet werden. Vorschläge zum Bearbeiten der Symlinks sind informativ und veranschaulichen, wie die Startsequenz ausgeführt wird. Sie funktionieren, bis jemand eine "chkconfig on" für Ihren Dienst ausführt und die Symlinks wieder wie ursprünglich erstellt werden. Wirklich, Sie möchten sich mit dem Problem auf der Ebene des Init-Skripts befassen, das eigentlich sowieso weniger umständlich ist. Es wird auch über die verschiedenen Runlevel hinweg konsistent sein. Sie müssen wahrscheinlich keine "# chkconfig" -Zeile hinzufügen, wie in Antwort 4 vorgeschlagen, da dort wahrscheinlich bereits eine ähnliche Zeile vorhanden ist.

Ich verwende ein Beispiel für einen Server, auf dem Openldap (slapd) mit einem MySQL-Datenbank-Backend (mysqld) ausgeführt wird. Die Konfiguration dieses Paares und warum Sie es vielleicht möchten, ist eine ganz andere Geschichte.

Beim Booten startet Openldap nicht, da es von MySQL abhängt und die Startsequenz versucht, es zu starten, bevor es gestartet wird - slapd hat Position 27 und mysqld hat Position 64

Die relevanten Symlinks in /etc/rc3.d/ sind

S27slapd -> ../init.d/slapd 
and
S64mysqld -> ../init.d/mysqld

Ich suche nach Werten, die in den beiden Init-Skripten festgelegt sind:

[root ~]# grep chkconfig /etc/rc.d/init.d/mysqld
# chkconfig: - 64 36

[root ~]# grep chkconfig /etc/rc.d/init.d/slapd
# chkconfig: - 27 73 

Ich bearbeite die chkconfig-Zeile in /etc/rc.d/init.d/slapd so, dass sie eine höhere Startposition hat als die in /etc/rc.d/init.d/mysqld (ich habe 85 gewählt)

[root ~]# grep chkconfig /etc/rc.d/init.d/slapd
# chkconfig: - 85 73

Ich mache "chkconfig slapd on" und überprüfe die Symlinks erneut

[root ~]# chkconfig slapd on
[root ~]# ls -l /etc/rc3.d/ | grep mysqld
lrwxrwxrwx  1 root root 16 Dec 10 13:45 S64mysqld -> ../init.d/mysqld
[root ~]# ls -l /etc/rc3.d/ | grep slapd
lrwxrwxrwx  1 root root 15 Apr 28 14:18 S85slapd -> ../init.d/slapd

Wenn dieser Server hochfährt, startet mysqld vor slapd und alles ist in Ordnung mit der Welt.

Jim Smyth
quelle