Einführung
In der IT läuft nicht immer alles nach Plan. Oftmals führen unerwartete Systemabstürze dazu, dass Systemadministratoren Reboots und Neustarts einzelner Dienste veranlassen müssen. Das Herausfinden und Neustarten jedes einzelnen Dienstes, den Ihre Anwendung nach einem Systemabsturz oder Neustart benötigt, kann mühsam sein. In diesem ersten Teil des zweiteiligen Tutorials zeigen wir Ihnen anhand praktischer Beispiele, wie Sie Dienste so konfigurieren, dass sie nach einem Systemabsturz oder Server-Neustart automatisch starten. Der zweite Teil wird theoretische Informationen behandeln über das, was wir im ersten Teil erreicht haben.
Wir werden den MySQL-Datenbankdienst für praktische Beispiele verwenden. Die gleichen Prinzipien gelten jedoch auch für andere Prozesse, die einen vollständigen Server ausmachen, wie z. B. Nginx, Apache, Redis oder andere Anwendungen. Sie können sich unsere Tutorials zu wie man MySQL installiert, Nginx und Apache.
In Linux-Distributionen gibt es drei wesentliche Initialisierungssysteme (Init-Systeme), je nach der von Ihnen verwendeten Distribution. Einige Distributionen können mit zwei oder mehr Init-Systemen ausgeliefert werden, wie unten beschrieben:
- System V – ein älteres Init-System, das in älteren Distributionen zu finden ist, wie:
- Ubuntu 9.04 und früher
- CentOS 5 und früher
- Debian 6 und früher
- Upstart – verwendet in früheren Distributionen wie:
- CentOS 6
- Ubuntu 9.10 bis Ubuntu 14.10 und Ubuntu 14.04
- Systemd – verwendet in den neuesten Distributionen wie:
- CentOS 7
- Debian 7 und 8.
- Ubuntu 15.04 und neuer
Hintergrund
Es ist üblich, dass Betriebssysteme, und insbesondere Linux- und Unix-Systeme, Prozesse und Dienste im Hintergrund ausführen. Solche Dienste wurden möglicherweise mit der Betriebssystemsoftware ausgeliefert. Einige wurden eventuell mit den von Ihnen installierten Benutzeranwendungen bereitgestellt.
Zu den Betriebssystemdiensten gehören:
- sshd – Dies ist der Daemon, der Remote-Verbindungen ermöglicht.
- cupsd – Dies ist der Daemon, der das Drucken steuert.
Zu den installierten Anwendungsdiensten gehören:
- httpd/apache2 – Ein Dienst, der mit dem Apache2-Webserver geliefert wird.
- nginx – Ein Dienst, der mit dem Nginx-Webserver geliefert wird.
Um sicherzustellen, dass unsere Webanwendungen, Datenbanken, Mailserver usw. erreichbar sind, müssen solche Dienste kontinuierlich laufen. Wenn Sie ein Systemadministrator oder ein neugieriger App-Entwickler sind, möchten Sie sicherstellen, dass diese Dienste kontinuierlich ausgeführt werden und im unglücklichen Fall eines Systemabsturzes nach dem Neustart des Systems automatisch starten. Und genau das werden wir in diesem praktischen Tutorial lernen.
Während das Einrichten von Alarmen und die kontinuierliche Überwachung Ihrer Linux-Distribution von entscheidender Bedeutung sind, können sich einige Linux-Dienste bei guter Konfiguration selbst heilen, dank der Init-Systeme, die die Dienste verwalten.
In Linux-Distributionen gibt es Betriebsmodi zur Systeminitialisierung, die als Runlevel bezeichnet werden. Damit ein Dienst automatisch startet, muss er einem Runlevel hinzugefügt werden. Jedes Linux- und Unix-ähnliche System verfügt über vier gängige Runlevel, wie unten aufgeführt:
- 0 – Runlevel 0 steht für das Herunterfahren des Systems.
- 1 – Runlevel 1 steht für den Einzelbenutzer- oder Rettungsmodus.
- 2, 3, 4 – Diese Runlevel stehen für Zustände, in denen das System im netzwerkfähigen Mehrbenutzer-Textmodus gestartet wurde.
- 5 – Runlevel 5 steht für den netzwerkfähigen Mehrbenutzer-Grafikmodus.
- 6 – Runlevel 6 steht für den Systemneustart.
In diesem Tutorial lernen Sie, wie Sie einen Linux-Dienst so konfigurieren, dass er beim Systemneustart automatisch startet, unter Verwendung der drei zuvor erklärten Init-Modi: System V, Upstart und Systemd.
Voraussetzungen
Dieses praktische Tutorial setzt voraus, dass Sie einen Linux-VPS haben, den Sie zum Mitmachen verwenden können. Sie können die kostenlose Testphase bei Cloudsigma nutzen und einige Server starten, um die Befehle auszuprobieren. Sie können unserem Schritt-für-Schritt-Tutorial zur Einrichtung Ihrer Ubuntu-Server.
Die Server, die Sie in diesem Tutorial erstellen, dienen ausschließlich dem Nachvollziehen der praktischen Übungen. Sie sollten die Befehle nicht auf einem Produktionsserver ausprobieren, da viele Dienste unterbrochen werden.
Einige der Distributionen, die Sie benötigen:
- Ubuntu 9.04 und früher oder Debian 6 x64 (wird zur Demonstration des System-V-Init-Systems verwendet)
- Ubuntu 14.04 x64 (wird zur Demonstration von Upstart verwendet)
- CentOS 7 x64 (wird zur Demonstration von systemd verwendet).
Stellen Sie sicher, dass Sie einen Nicht-Root-Benutzer mit sudo-Rechten eingerichtet haben. Sie können einen Blick auf unser Tutorial zur Konfiguration der sudoers-Datei hier werfen.
Verwendung von System V
Dies ist das älteste Init-System, das in früheren Linux-Distributionen verwendet wurde, wie z. B.:
- Debian 6 und früher
- CentOS 5 und früher
- Ubuntu 9.04 und früher
Die meisten installierbaren Serveranwendungen wie MySQL und Nginx werden standardmäßig mit Init-Skripten ausgeliefert, die im Verzeichnis /etc/init.d gespeichert sind. Diese Skripte ermöglichen es ihnen, nach einem Neustart zu starten. Sie sind jedoch möglicherweise nicht so konfiguriert, dass sie nach einem Systemabsturz automatisch neu starten.
Autostart-Checkliste für System V
Der erste Schritt besteht darin, zu überprüfen, ob ein funktionsfähiges Bash-Init-Skript im Verzeichnis /etc/init.d/service vorhanden ist. Um den Dienst in Debian- oder Ubuntu-Distributionen zu aktivieren, verwenden Sie den Befehl update-rc.d, in einem CentOS-System verwenden Sie chkconfig. Ersetzen Sie dies durch Ihren tatsächlichen Dienstnamen:
|
1 |
sudo update-rc.d service enable |
Der obige Befehl erstellt einen Symlink im Verzeichnis /etc/rc2.d, der wie die folgende Ausgabe aussieht. Erstellen Sie ihn nicht selbst, da er automatisch generiert wird:
|
1 |
lrwxrwxrwx 1 root root 20 Dec 10 07:09 S02mysql -> ../init.d/service |
Fügen Sie am Ende der Datei /etc/inittab eine Respawn-Zeile hinzu, wie im folgenden allgemeinen Beispiel gezeigt. Denken Sie daran, diese durch den tatsächlichen Pfad zum Startskript Ihrer Anwendung zu ersetzen:
|
1 |
id:2345:respawn:/bin/sh /path/to/your-application/startup |
Geben Sie die folgenden Befehle ein, um den Dienst zu stoppen und zu starten:
|
1 2 |
sudo service service-name stop sudo service service-name start |
Starten Sie als Nächstes den Server neu:
|
1 |
sudo reboot |
Wie werden die Änderungen getestet?
Überprüfen Sie nach dem Neustart des Servers, ob der Dienst aktiv ist, indem Sie mit dem folgenden Befehl nach der Prozessnummer suchen:
|
1 |
ps -ef | grep service-name |
Beenden Sie den Prozess mit dem Befehl:
|
1 |
sudo kill -9 process_number |
Überprüfen Sie nach fünf Minuten, ob der Dienst aktiv ist und läuft.
Praktische System-V-Konfiguration mit einem echten Dienst
In den folgenden Schritten werden wir eine echte Serveranwendung wie MySQL ausprobieren. Sie sollten Zugriff auf eine virtuelle Maschine mit Debian 6 haben. Verbinden Sie sich mit einem Konto, das über sudo-Rechte verfügt, über SSH oder putty, wenn Sie einen Windows-Desktop verwenden.
Schritt 1: MySQL installieren
Geben Sie den folgenden Befehl ein, um MySQL zu installieren:
|
1 |
sudo apt-get install mysql-server -y |
Wenn die Installation beginnt, werden Sie nach einem Root-Passwort gefragt. Geben Sie dann ein Passwort Ihrer Wahl ein und bestätigen Sie es. Warten Sie, bis die Installation abgeschlossen ist, und geben Sie dann den folgenden Befehl ein, um mit der Absicherung von MySQL zu beginnen:
|
1 |
mysql_secure_installation |
Sie werden nach dem Root-Passwort gefragt, das Sie zuvor eingegeben haben. Drücken Sie N, um es beizubehalten. Drücken Sie als Nächstes Y, um die folgenden Aufforderungen zum Entfernen anonymer Benutzer, zum Deaktivieren des Remote-Root-Logins und zum Entfernen der Testdatenbank zu akzeptieren. Stimmen Sie schließlich dem Neuladen der Berechtigungstabelle zu, damit die Änderungen automatisch wirksam werden.
Damit ist die MySQL-Installation abgeschlossen. Sie können überprüfen, ob der Dienst läuft, indem Sie den folgenden Befehl eingeben:
|
1 |
service mysql status |
Schritt 2: MySQL so konfigurieren, dass es nach dem Neustart automatisch startet
MySQL ist standardmäßig so konfiguriert, dass es nach einem Systemneustart startet. Sie finden den Symlink zum MySQL-Initialisierungsskript im Verzeichnis /etc/rc2.d. Diese Symlinks werden nicht manuell erstellt. Sie können den Befehl update-rc.d verwenden, um Dienste zu aktivieren und zu deaktivieren.
Geben Sie den folgenden Befehl ein, um den Inhalt des Verzeichnisses aufzulisten:
|
1 |
ls -l /etc/rc2.d |
Prüfen Sie, ob Sie den Symlink zum MySQL-Init-Skript sehen können:
|
1 |
lrwxrwxrwx 1 root root 15 Dec 2 10:42 S01mysql -> ../init.d/mysql |
Das S ist wichtig, denn solange Sie ein S Skript im Standard-Runlevel-Verzeichnis für den Dienst, startet das Init-System den Dienst beim Booten des Servers. Um zu überprüfen, ob MySQL nach dem Neustart automatisch startet, geben Sie den folgenden Befehl ein, um das System neu zu starten:
|
1 |
sudo reboot |
Ihre SSH-Verbindung wird während eines Neustarts getrennt. Warten Sie ein oder zwei Minuten und verbinden Sie sich erneut. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob der Dienst läuft:
|
1 |
service mysql status |
Die Ausgabe zeigt an, dass der Dienst läuft. Dies bedeutet, dass er nach dem Neustart automatisch gestartet wurde. Für Dienste, die nicht so konfiguriert sind, dass sie automatisch starten, müssen Sie dies selbst konfigurieren.
Wir können den MySQL-Dienst deaktivieren und das System neu starten, um zu testen, ob er automatisch startet. In Debian- und Ubuntu-Systemen können Sie den Befehl update-rc.d verwenden, um Dienste zum Init-System hinzuzufügen oder daraus zu entfernen. Geben Sie den folgenden Befehl ein, um den MySQL-Dienst zu deaktivieren:
|
1 |
sudo update-rc.d mysql disable |
Starten Sie das System neu und verbinden Sie sich wieder über SSH. Versuchen Sie, sich mit dem folgenden Befehl mit MySQL zu verbinden:
|
1 |
mysql -u root -p |
Sie erhalten eine MySQL-Fehlermeldung wie:
|
1 |
ERROR 2002 (HY000): Can't connect to local MySQL server |
Geben Sie dann den folgenden Befehl ein, um den Dienst wieder zu aktivieren:
|
1 |
sudo update-rc.d mysql enable |
Wenn Sie eine CentOS-Distribution verwenden, lautet der Befehl:
|
1 |
sudo chkconfig mysql enable |
Da MySQL anfangs nicht gestartet war, müssen Sie es starten. Geben Sie den folgenden Befehl ein:
|
1 |
sudo service mysql start |
Schritt 3: Konfigurieren eines Dienstes (MySQL) für den automatischen Start nach einem Systemabsturz
System V startet einen Prozess nach einem Absturz nicht automatisch. Wir können einen Systemabsturz simulieren, indem wir die MySQL-Prozess-ID ermitteln und den Prozess beenden. Geben Sie den folgenden Befehl ein, um die MySQL-Prozess-ID zu finden:
|
1 |
ps -ef | grep mysql |
Suchen Sie in der Ausgabe nach den MySQL-Prozessen. Die Hauptprozesse, die MySQL ausführen, sind mysqld_safe und mysqld. Notieren Sie sich deren Prozess-IDs (dies sind Zahlen) und verwenden Sie die folgenden Befehle, um sie zu beenden:
|
1 2 |
sudo kill -9 mysqldsafe_number sudo kill -9 mysqld_number |
Überprüfen Sie den Status des MySQL-Dienstes mit dem Befehl:
|
1 |
sudo service mysql status |
Die Ausgabe zeigt an, dass MySQL gestoppt wurde. Wir können es manuell mit dem Befehl „service start“ neu starten. Wir möchten jedoch einen automatischen Prozess. Um dieses automatische Verhalten zu erreichen, müssen wir die Datei /etc/inittab bearbeiten. Dies ist die erste Datei, die System V Init beim Booten liest. Die Datei /etc/inittab enthält Anweisungen dazu, wie sich ein Prozess bei einem Absturz verhalten soll. Bei korrekter Konfiguration startet sie das System bei einem Absturz erneut. In unserem Fall möchten wir sicherstellen, dass MySQL einer dieser Dienste ist.
Die Datei /etc/inittab ist für eine Linux-Distribution von entscheidender Bedeutung. Sie bestimmt, ob Ihr System neu startet oder nicht. Wenn Sie bei den Befehlen einen Fehler machen, startet das System beim Neustart möglicherweise nicht. Wie bereits erwähnt, hoffen wir, dass Sie diese Befehle nur in einer Testserver-Umgebung und nicht in einer Produktionsumgebung ausprobieren.
Erstellen Sie zunächst eine Kopie der Datei, bevor Sie mit der Bearbeitung beginnen:
|
1 |
sudo cp /etc/inittab /etc/inittab.original |
Öffnen Sie als Nächstes die Datei mit nano:
|
1 |
sudo nano /etc/inittab |
Scrollen Sie ans Ende der Datei und fügen Sie das folgende Code-Snippet hinzu:
|
1 |
ms:2345:respawn:/bin/sh /usr/bin/mysqld_safe |
Der obige Befehl startet den mysql_safe-Prozess nach einem Systemabsturz neu. Er besteht aus vier durch Doppelpunkte getrennten Feldern, wie unten erklärt:
- ms: Bestimmt eine ID für den Prozess.
- 2345: Bestimmt die Runlevel, für die der Befehl gilt. In diesem Fall: Runlevel 2, 3, 4, 5.
- respawn: Bestimmt die Aktion. In diesem Fall starten wir den Prozess neu (respawn).
- /bin/sh /usr/bin/mysqld_safe: Der letzte Teil definiert den Prozess – den Befehl, der ausgeführt wird, um den Prozess neu zu starten.
Drücken Sie nun Strg + O und die Eingabetaste, um die Datei zu speichern. Drücken Sie dann Strg + X, um den Editor zu schließen. Geben Sie den folgenden Befehl ein, um den Dienst zu starten:
|
1 |
sudo service mysql start |
Starten Sie den Server neu und führen Sie dann die zuvor erklärten Befehle aus, um die Prozessnummer zu finden. Beenden Sie als Nächstes die Prozesse, beginnend mit dem Befehl ps -ef | grep mysql. Warten Sie einige Minuten und geben Sie den folgenden Befehl ein, um den Status von MySQL zu überprüfen:
|
1 |
sudo service mysql status |
Die Ausgabe sollte anzeigen, dass der MySQL-Dienst aktiv ist und läuft, was bedeutet, dass er nach einem Absturz neu starten konnte. Sie können denselben Prozess für andere Dienste auf Ihrem Server befolgen.
Dienste automatisch starten mit Upstart
Upstart ist ein weiteres Init-System, das ursprünglich in Ubuntu 6 eingeführt wurde und später in Ubuntu 9.10 zum Standard wurde. RHEL 6 und seine Derivate sowie Googles Chrome OS verwenden ebenfalls das Upstart-Init-System. Für die Schritte in diesem Abschnitt sollten Sie einen Server haben, auf dem eine der folgenden Distributionen läuft:
- Ubuntu 9.10 bis Ubuntu 14.10 und die LTS-Version von Ubuntu, d. h. Ubuntu 14.04.
- CentOS 6
Sehen wir uns an, wie Sie die Upstart-Dateien so konfigurieren können, dass Ihre Serverdienste bei Neustarts oder Systemabstürzen automatisch gestartet werden. Upstart verwendet Konfigurationsdateien, die im Verzeichnis /etc/init gespeichert sind, um Dienste in einer Linux-Distribution zu steuern. Die meisten neueren Versionen von Serveranwendungen wie MySQL und Nginx installieren ihre eigenen Init-Skripte im Verzeichnis /etc/init. Sie starten daher nach einem Neustart und nach einem Systemabsturz, ohne dass Sie etwas tun müssen.
Autostart-Checkliste für Upstart
Hier sind einige Referenzkonfigurationen, die Sie überprüfen können, um sicherzustellen, dass Ihr Dienst so konfiguriert ist, dass er automatisch startet.
- Stellen Sie sicher, dass der Dienst ein Init-Skript im Verzeichnis /etc/init/service_name.conf – service_name hat, wobei service_name der tatsächliche Name Ihres spezifischen Dienstes ist. Sie sollten nach den folgenden zwei Zeilen in der Datei /etc/init/service_name.conf suchen:
- Eine Zeile, die so etwas enthält wie start on runlevel [2345]. Sie zeigt an, dass der Dienst beim Systemneustart gestartet wird.
- Eine Zeile, die so etwas enthält wie respawn. Sie zeigt an, dass der Dienst nach einem Systemabsturz neu gestartet (respawned) wird.
- Stellen Sie sicher, dass sich keine Dienst-Override-Datei im Verzeichnis /etc/init/service_name.override befindet. Es sei denn, Sie oder ein anderer Systemadministrator haben diese zuvor erstellt.
- Geben Sie die folgenden Befehle ein, um den Dienst zu stoppen und zu starten:
|
1 2 |
sudo initctl stop service_name sudo initctl start service_name |
- Starten Sie das System neu und verbinden Sie sich nach einigen Minuten wieder. Führen Sie nun einige Tests durch, um zu sehen, ob alles funktioniert
- Überprüfen Sie nach dem Neustart, ob der Dienst aktiv ist und läuft. Geben Sie den folgenden Befehl ein, um nach der Prozessnummer zu suchen, und ersetzen Sie service_name durch den tatsächlichen Namen des Dienstes, den Sie testen:
|
1 |
ps -ef | grep service_name |
- Sobald Sie die Prozessnummer haben, geben Sie den folgenden Befehl ein, um den Prozess zu beenden:
|
1 |
sudo kill -9 process_number |
- Warten Sie einige Sekunden und überprüfen Sie erneut, ob der Prozess aktiv ist und läuft.
Praktische Upstart-Konfiguration mit einem echten Dienst
Im nächsten Abschnitt werden wir versuchen zu demonstrieren, wie Sie Upstart mit einem tatsächlichen Dienst verwenden können. Wir werden die Tests auf einem virtuellen Ubuntu 14.04-Maschinenserver mit MySQL als Dienst ausführen. Verbinden Sie sich mit Ihrem Ubuntu 14.04-Testserver über SSH oder Putty, wenn Sie Windows verwenden. Standardmäßig sollten Sie einen Nicht-Root-Benutzer mit Sudo-Rechten verwenden. Sobald Sie angemeldet sind, können wir mit den Schritten beginnen:
Schritt 1: MySQL installieren
Denken Sie immer daran, Ihre Pakete zu aktualisieren, bevor Sie neue Software installieren:
|
1 |
sudo apt-get update |
Geben Sie nun den folgenden Befehl ein, um den MySQL-Server zu installieren:
|
1 |
sudo apt-get install mysql-server –y |
Erstellen Sie ein Root-Passwort, wenn Sie dazu aufgefordert werden. Warten Sie, bis die Installation abgeschlossen ist, und führen Sie den folgenden Befehl aus, um mit der Absicherung Ihrer MySQL-Installation zu beginnen:
|
1 |
mysql_secure_installation |
Folgen Sie den Eingabeaufforderungen, wie Sie es im vorherigen Abschnitt getan haben. Aktualisieren Sie dann die Berechtigungen (flush privileges), damit die Änderungen sofort wirksam werden.
Schritt 2: Konfigurieren eines Dienstes (MySQL) für den automatischen Start nach einem Systemneustart
MySQL ist so eingestellt, dass es nach einem Neustart automatisch startet. Wir sehen uns nur die Konfigurationsdateien an, um zu erfahren, wie wir unsere benutzerdefinierten Anwendungen so konfigurieren können, dass sie ebenfalls nach einem Neustart automatisch starten. Der MySQL-Dienst wurde nach der Installation automatisch gestartet. Lassen Sie uns jedoch bestätigen, dass er läuft, indem wir den folgenden Befehl eingeben:
|
1 |
sudo initctl status mysql |
Sie sollten eine Ausgabe sehen, die anzeigt, dass der MySQL-Dienst läuft, etwa so:
|
1 |
mysql start/running, process 2553 |
Starten Sie Ihren Server neu und melden Sie sich wieder an. Geben Sie erneut den folgenden Befehl ein, um zu testen, ob er läuft:
|
1 |
sudo initctl status mysql |
Die Ausgabe zeigt an, dass MySQL läuft, was bedeutet, dass es nach dem Neustart automatisch gestartet wurde. In diesem Fall muss nichts geändert werden. Dieses Verhalten ist jedoch bei anderen Anwendungen möglicherweise nicht dasselbe. Sie fragen sich vielleicht, woher das Upstart-Init-System weiß, dass es MySQL nach dem Neustart automatisch starten soll. MySQL installiert seine Upstart-Startkonfigurationsdatei am Speicherort /etc/init/mysql.conf. Upstart-Dateien sind keine Shell-Skripte, sondern Textdateien mit Skriptblöcken für Pre-Start- und Post-Start-Ereignisse. Die Blöcke weisen das Upstart-System an, was auszuführen ist, wenn der MySQLd-Prozess startet oder wenn er bereits gestartet wurde.
Geben Sie den folgenden Befehl ein, um die Datei im Editor mit nano zu öffnen:
|
1 |
sudo nano /etc/init/mysql.conf |
Die Ausgabe der Datei kann wie folgt aussehen:
|
1 2 3 4 5 6 7 8 |
description "MySQL Server" author "Mario Limonciello <superm1@ubuntu.com>" start on runlevel [2345] stop on starting rc RUNLEVEL=[016] respawn respawn limit 2 5 |
Wie zu sehen ist, weist der Startblock MySQL an, auf den Runlevels 2,3,4,5 zu starten und nicht auf 0,1,6. Wenn Sie eine Upstart-Konfiguration für Ihre Anwendung definieren, tun Sie dies in diesem Abschnitt. Der Respawn-Block weist Upstart an, was nach einem Absturz zu tun ist. Wir werden dies im nächsten Abschnitt besprechen, lassen Sie die Datei also im nano-Editor geöffnet.
Schritt 3: Konfigurieren eines Dienstes (MySQL) für den automatischen Start nach einem Absturz
Die respawn-Direktive in der Datei /etc/init/mysql.conf weist Upstart an, den MySQL-Dienst nach einem Absturz neu zu starten.
Die Direktive „respawn limit“ weist Upstart an, wie oft versucht werden soll, den abgestürzten MySQL-Dienst in einem in Sekunden angegebenen Intervall neu zu starten. Das erste Argument (2) gibt die Anzahl der Versuche an. Das zweite Argument (5) gibt das Intervall in Sekunden an. Wenn Upstart nach einem Absturz den MySQL-Dienst nicht innerhalb des Schwellenwerts neu starten kann, bleibt er gestoppt. Dieses Verhalten soll das System davor schützen, seine Stabilität zu beeinträchtigen, falls es versucht, kontinuierlich abstürzende Dienste neu zu starten. Sie können den Editor nun schließen, ohne Änderungen vorzunehmen.
Lassen Sie uns testen, ob MySQL nach einem Absturz automatisch wieder hochfährt. Geben Sie den folgenden Befehl ein, um den Status zu überprüfen und die Prozessnummer des MySQL-Dienstes zu erhalten:
|
1 |
sudo initctl status mysql |
Die Ausgabe sollte in etwa so aussehen. Notieren Sie sich die Prozessnummer, da wir sie später verwenden werden:
|
1 |
mysql start/running, process 738 |
Geben Sie als Nächstes den folgenden Befehl ein, um den Prozess zu beenden. Dies simuliert einen Absturz. Ersetzen Sie die Nummer durch die Prozessnummer, die Sie im vorherigen Befehl erhalten haben:
|
1 |
sudo kill -9 7738 |
Überprüfen Sie den Status von MySQL erneut, indem Sie den folgenden Befehl eingeben:
|
1 |
sudo initctl status mysql |
Es sollte wieder laufen, aber wahrscheinlich mit einer anderen Prozessnummer:
|
1 |
mysql start/running, process 1428 |
Dies geschieht aufgrund der respawn-Direktive in der /etc/init/mysql.conf -Datei. Sie stellt sicher, dass MySQL im Falle eines Systemabsturzes automatisch gestartet wird. Daher läuft Ihre Anwendung, die von einer MySQL-Datenbank abhängt, wie erwartet weiter.
Dienste automatisch starten mit Systemd
Systemd ist ein Initialisierungssystem, das in den meisten neueren Linux-Distributionen zu finden ist. Es ist wahrscheinlich das, was Sie verwenden werden, wenn Sie einen neuen VPS erstellen. Es wurde zuerst in Fedora eingeführt. Es wird mit RHEL 7 und dessen Derivaten wie CentOS 7 ausgeliefert. Ab Ubuntu 15.04 finden Sie Systemd nativ vor. Systemd ist abwärtskompatibel mit den System-V-Initialisierungsskripten und -Befehlen. Daher sollte jeder System-V-Dienst unter Systemd funktionieren. Die meisten in System V und Upstart verwendeten Befehle wurden für die Verwendung mit Systemd angepasst.
Mit Systemd starten die meisten Serveranwendungen wie MySQL und Nginx nach einem Neustart oder Herunterfahren automatisch, ohne dass Sie etwas ändern müssen. Für Ihre benutzerdefinierten Anwendungen müssen Sie eigene Init-Skripte erstellen, um Dienste automatisch neu zu starten.
Weitere ausführliche Informationen zu Systemd finden Sie in unserem Tutorial zur Verwaltung von Systemd-Diensten und -Einheiten mit Systemctl.
Autostart-Checkliste für Systemd
Hier sind einige Referenzkonfigurationen, die Sie überprüfen können, um sicherzustellen, dass Ihr Dienst so konfiguriert ist, dass er automatisch mit Systemd startet.
- Der Dienst muss über ein funktionierendes Systemd-Init-Skript verfügen, das sich unter /etc/systemd/system/multi-user.target.wants/serviceName.service befindet. ServiceName ist der tatsächliche Name des Dienstes, den Sie konfigurieren.
- Der Befehl zum Aktivieren des Dienstes lautet:
|
1 |
sudo systemctl enable serviceName.service |
- Der Befehl erstellt einen Symlink im Verzeichnis /etc/systemd/system/multi-user.target.wants/, der in etwa so aussehen kann:
|
1 |
lrwxrwxrwx 1 root root 11 Dez 1 04:43 /etc/systemd/system/multi-user.target.wants/serviceName.service -> /usr/lib/systemd/system/serviceName.service |
- Sobald dieser Symlink vorhanden ist, haben Sie den automatischen Neustart nach dem Booten aktiviert.
- Um die Änderungen zu aktivieren, laden Sie den System-Daemon neu und starten Sie dann den Dienst mit den folgenden Befehlen neu:
|
1 2 3 |
sudo systemctl daemon-reload sudo systemctl restart serviceName.service |
- Um zu testen, ob Ihre Konfigurationen den Dienst nach einem Neustart starten, können Sie das System neu starten:
|
1 |
sudo reboot |
- Wenn das System neu startet, suchen Sie nach der Prozessnummer mit dem Befehl:
|
1 |
ps -ef | grep serviceName |
- Notieren Sie sich die Prozessnummer und beenden Sie den Prozess mit dem Befehl:
|
1 |
sudo kill -9 process_number |
- Warten Sie einige Sekunden und suchen Sie erneut nach dem Dienst, um zu überprüfen, ob er wieder läuft.
Praktische Systemd-Konfiguration mit einem echten Dienst
In diesem Abschnitt werden wir versuchen, den MySQL-Dienst auf einer virtuellen Maschine mit Ubuntu 20.04 zu konfigurieren.
Schritt 1: Verbinden Sie sich mit Ihrem Virtual Private Server (Ubuntu 20.04 oder CentOS 7 x64)
Melden Sie sich bei Ihrem VPS an oder erstellen Sie einen über das CloudSigma-Panel und verbinden Sie sich über SSH oder Putty, wenn Sie Windows verwenden. Wir verwenden für diesen Abschnitt des Tutorials einen Ubuntu 20.04-Server. Die gleichen Befehle können auch für CentOS 7 angewendet werden. Stellen Sie sicher, dass Sie einen Nicht-Root-Benutzer mit Sudo-Rechten verwenden.
Schritt 2: Installieren Sie MySQL (den Dienst, den wir konfigurieren)
Aktualisieren Sie zuerst Ihr System:
|
1 |
sudo apt update |
Anschließend können Sie den MySQL-Server mit folgendem Befehl installieren:
|
1 |
sudo apt install mysql-server –y |
Führen Sie als Nächstes den folgenden Befehl aus, um mit der Absicherung von MySQL zu beginnen:
|
1 |
sudo mysql_secure_installation |
Das Skript fragt Sie, ob Sie die Komponente VALIDATE PASSWORD einrichten möchten, oder ob Sie eine beliebige Taste drücken möchten, um fortzufahren, ohne die Komponente zu aktivieren. Folgen Sie diesem Link, um mehr über die MySQL-Komponente zur Passwortvalidierung zu erfahren.
Drücken Sie 1, um es zu aktivieren, und wählen Sie dann die mittlere Stufe, indem Sie 1 drücken. Geben Sie ein starkes Passwort ein: eine Kombination aus Groß- und Kleinschreibung, Sonderzeichen und Zahlen. Bestätigen Sie das Passwort und bestätigen Sie die Abfrage, ob Sie das eingegebene Passwort als Root-Passwort verwenden möchten. Drücken Sie bei den übrigen Abfragen y, um sie zu akzeptieren, wie Sie es in den vorherigen Abschnitten getan haben. Bereinigen Sie schließlich die Berechtigungen (flush privileges) für MySQL, um die Änderungen neu zu laden.
Schritt 3: MySQL so konfigurieren, dass es nach dem Neustart automatisch startet
MySQL ist so konfiguriert, dass es nach einem Neustart startet, sodass Sie keine Änderungen vornehmen müssen. Wir können jedoch die MySQL-Konfigurationsdateien verwenden, um zu lernen, wie wir unsere benutzerdefinierten Dateien konfigurieren.
Überprüfen Sie zuerst, ob der MySQL-Dienst so konfiguriert wurde, dass er beim Booten startet. Geben Sie den folgenden Befehl ein (beachten Sie, dass der MySQL-Dienst in CentOS mysqld heißt):
|
1 |
sudo systemctl is-enabled mysql.service |
Hier ist die Ausgabe:

Starten Sie als Nächstes den VPS neu, indem Sie den folgenden Befehl eingeben:
|
1 |
sudo reboot |
Verbinden Sie sich wieder über SSH und geben Sie den folgenden Befehl ein, um den Status des MySQL-Dienstes zu überprüfen:
|
1 |
sudo systemctl status mysql.service |
Sie sollten eine Ausgabe erhalten, die der im folgenden Screenshot ähnelt:

Um den MySQL-Dienst zu deaktivieren, geben Sie den folgenden Befehl ein:
|
1 |
sudo systemctl disable mysql.service |
Die Ausgabe zeigt an, dass Symlinks zum MySQL-Dienst aus Systemd entfernt wurden:

Sie können testen, ob der Dienst mit dem Systemd-Init-System aktiviert ist, indem Sie den folgenden Befehl eingeben:
|
1 |
sudo systemctl is-enabled mysql.service |
Die Ausgabe zeigt, dass er deaktiviert ist. Wenn Sie Ihr System neu starten, startet MySQL nicht beim Booten:
![]()
Aktivieren Sie den Dienst, indem Sie den folgenden Befehl eingeben:
|
1 |
sudo systemctl enable mysql.service |
Die Ausgabe zeigt den im Systemd-Init erstellten Symlink zum MySQL-Dienst:

Wenn Sie neu starten, startet der MySQL-Dienst automatisch.
Schritt 4: MySQL so konfigurieren, dass es nach einem Absturz automatisch startet
MySQL ist so konfiguriert, dass es nach einem Absturz automatisch neu startet. Sehen wir uns an, wie diese Konfiguration in Systemd implementiert ist. Systemd verwendet Unit-Dateien zur Konfiguration. Geben Sie den folgenden Befehl ein, um die Konfigurationsdatei mysql.service in nano zu öffnen:
|
1 |
sudo nano /etc/systemd/system/multi-user.target.wants/mysql.service |
Die Ausgabe sieht so aus:

Unser Anliegen ist die Restart-Direktive. Wie definiert, wird MySQL bei einem Fehler neu gestartet. Die Restart-Direktive definiert, was in Systemd passieren soll, genau wie die Respawn-Direktive in Upstart.
Nicht alle Dienste verfügen über diese Direktive. Um zu aktivieren, dass ein Dienst nach einem Absturz neu startet, können Sie jederzeit die Restart-Direktive unter dem [Service]-Block der Dienstkonfigurations-Unit-Datei hinzufügen. Wenn der [Service]-Header nicht existiert, fügen Sie ihn hinzu. Verlassen Sie nun den Editor, indem Sie Strg + X drücken.
Um einen Absturz zu emulieren, suchen Sie die MySQL-Prozess-ID, indem Sie den folgenden Befehl eingeben:
|
1 |
sudo systemctl status mysql.service |
Der Statusprüfungsbefehl zeigt eine Prozess-ID an, in unserem Fall ist es 3555:

Geben Sie den folgenden Befehl ein, um den Prozess zu beenden. Ersetzen Sie sie durch die Prozess-ID, die Sie auf Ihrem Server erhalten haben:
|
1 |
sudo kill -9 3555 |
Geben Sie den folgenden Befehl ein, um den Status zu überprüfen:
|
1 |
sudo systemctl status mysql.service |
Die Ausgabe zeigt, dass MySQL läuft, jedoch mit einer neuen Prozess-ID. Dies bedeutet, dass es nach dem Absturz automatisch neu gestartet wurde:

Fazit
In diesem Tutorial haben wir Ihnen die drei Initialisierungssysteme in Linux-Distributionen vorgestellt: System V, Upstart und Systemd. Wir haben gelernt, wie Sie jedes der Init-Systeme verwenden können, um Ihre kontinuierlich laufenden Dienste so zu konfigurieren, dass sie nach einem Neustart oder Systemabsturz automatisch starten. Dies sollte Ihnen als Ausgangspunkt dienen, wenn Sie Ihre Dienste konfigurieren müssen. Der erste Teil dieser Serie war hauptsächlich ein praktisches Tutorial. Der der zweite Teil ist theoretischer und enthält mehr Details darüber, was wir im ersten Teil getan haben. Löschen Sie Ihre Testserver noch nicht, da Sie diese auch im zweiten Teil verwenden werden.
Viel Spaß beim Computing!
Kommentare
Noch keine Kommentare. Schreiben Sie den ersten.