Wenn eine Anwendung im Hintergrund ausgeführt wird, wird sie als Dienst bezeichnet. Diese sind für den Betrieb des Systems oder unserer Softwareanwendungen unerlässlich. Einige der allgemeinen Dienste, die Sie auf den meisten Servern finden, sind Apache, MySQL, NGINX usw. Wenn das System hochfährt, werden diese Dienste so konfiguriert, dass sie automatisch gestartet werden.
Ich verwende Ubuntu, um meine Websites zu hosten. Ich verwende auch MySQL, um alle meine Website-Daten zu speichern. Manchmal führe ich regelmäßige Updates durch und es ist wichtig, diese Dienste neu zu starten. In diesem Tutorial lernen wir verschiedene Möglichkeiten zum Starten, Stoppen und Neustarten von Diensten in Ubuntu kennen.
Verschiedene Möglichkeiten zum Starten, Beenden und Neustarten von Diensten unter Ubuntu
- systemctl-Befehl
- Dienstbefehl
- Init-Skripte
Ubuntu-Dienste mit systemctl starten, stoppen und neu starten
Dies ist die bevorzugte Methode zur Verwaltung von Ubuntu-Diensten. Wenn Sie den Dienstnamen nicht kennen, können Sie systemctl --all
ausführen Befehl, um alle Dienste aufzulisten. Es können jedoch Hunderte von Diensten ausgeführt werden, daher ist es besser, die Liste mit grep
zu filtern Befehl.
Versuchen wir, die Dienstnamen von MySQL und Apache HTTP-Server herauszufinden.
# systemctl --all | grep -i mysql mysql.service loaded active running MySQL Community Server # systemctl --all | grep -i apache apache2.service loaded active running The Apache HTTP Server #
Der Name des MySQL-Dienstes lautet also „mysql.service“ und der Dienstname des Apache-HTTP-Servers lautet „apache2.service“.
Lassen Sie uns lernen, wie Sie diese Dienste mit dem Befehl systemctl verwalten.
1. Stoppen Sie den Dienst mit systemctl
# systemctl stop mysql.service #
Der Befehl gibt keine Ausgabe aus, wenn die Ausführung erfolgreich ist.
2. Überprüfen des Dienststatus mit systemctl
Wir können den Dienststatus mit dem folgenden Befehl überprüfen.
# systemctl status mysql.service ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: inactive (dead) since Sat 2020-05-02 17:39:22 UTC; 9s ago Main PID: 26948 (code=exited, status=0/SUCCESS)
3. Starten Sie den Dienst mit systemctl
# systemctl start mysql.service # # systemctl status mysql.service ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-05-02 17:41:43 UTC; 3s ago Process: 30254 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid (code=exited, s Process: 30233 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 30256 (mysqld) Tasks: 27 (limit: 2318) CGroup: /system.slice/mysql.service └─30256 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
Beachten Sie, dass der Wert „Aktiv“ inaktiv (tot) war, als wir den Dienst gestoppt hatten. Nach dem Start des Dienstes wird er in aktiv (wird ausgeführt) geändert.
4. Dienst mit systemctl neu starten
# systemctl restart apache2.service # systemctl status apache2.service ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Sat 2020-05-02 17:55:09 UTC; 8s ago
Tipp :Es ist nicht erforderlich, den vollständigen Dienstnamen mit dem Befehl systemctl zu verwenden. Wenn wir beispielsweise „systemctl restart mysql“ ausführen, wird automatisch „.service“ angehängt und der Befehl „systemctl restart mysql.service“ ausgeführt.
Ubuntu-Dienste mit dem Dienstbefehl verwalten
Wir können alle Dienste mit service --status-all
auflisten Befehl. Verwenden Sie bei Bedarf den grep-Befehl, um den gesuchten Dienst herauszufiltern.
# service --status-all | grep mysql [ + ] mysql #
Im Dienstbefehl müssen wir zuerst den Dienstnamen und dann den auszuführenden Befehl angeben.
Dienst stoppen:
# service mysql stop
Dienst starten:
# service mysql start
Dienst neu starten:
# service mysql restart
Dienststatus prüfen:
# service mysql status ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-05-02 18:19:34 UTC; 39s ago Process: 31768 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid (code=exited, s Process: 31746 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 31770 (mysqld) Tasks: 27 (limit: 2318) CGroup: /system.slice/mysql.service └─31770 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
Ubuntu-Init-Skripte zum Verwalten von Diensten
Die Init-Skripte der Dienste befinden sich in /etc/init.d/
Verzeichnis. Wir können diese Skripte verwenden, um die Dienste zu verwalten. Es wird jedoch nicht mehr empfohlen, sie zu verwenden, und es ist besser, den Befehl systemctl zu verwenden.
Dienst stoppen:
# /etc/init.d/mysql stop [ ok ] Stopping mysql (via systemctl): mysql.service. #
Dienst starten:
# /etc/init.d/mysql start [ ok ] Starting mysql (via systemctl): mysql.service. #
Dienst neu starten:
# /etc/init.d/mysql restart [ ok ] Restarting mysql (via systemctl): mysql.service. #
Dienststatus prüfen:
# /etc/init.d/mysql status ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-05-02 18:26:30 UTC; 17s ago
Berechtigungsprobleme beim Starten/Stoppen von Diensten
Wenn Sie nicht als Root-Benutzer angemeldet sind, werden Sie bei den obigen Befehlen aufgefordert, das Root-Benutzer-Passwort zur Ausführung anzugeben. Wenn das falsche Passwort eingegeben wird, wird der Fehler „Authentifizierung fehlgeschlagen“ ausgegeben und der Befehl wird nicht ausgeführt.
Wenn Sie auf der sudoers-Liste stehen, können Sie diese Befehle als sudo-Benutzer ausführen. Wenn Sie nicht auf der Sudoers-Liste stehen, wird eine Fehlermeldung angezeigt, dass Sie nicht auf der Sudoers-Liste stehen, und der Vorfall wird gemeldet.
test@localhost:~$ systemctl stop mysql ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units === Authentication is required to stop 'mysql.service'. Authenticating as: root Password: polkit-agent-helper-1: pam_authenticate failed: Authentication failure ==== AUTHENTICATION FAILED === Failed to stop mysql.service: Access denied See system logs and 'systemctl status mysql.service' for details. test@localhost:~$ sudo systemctl stop mysql [sudo] password for test: test is not in the sudoers file. This incident will be reported. test@localhost:~$
Wenn Sie also einen Dienst verwalten möchten, stellen Sie sicher, dass Sie über die erforderlichen Berechtigungen zum Ausführen dieser Befehle verfügen.
Schlussfolgerung
Wir haben verschiedene Möglichkeiten kennengelernt, Dienste auf Ubuntu zu verwalten. Der systemctl-Befehl ist der bevorzugte Ansatz zum Starten/Stoppen/Neustarten von Diensten unter Ubuntu. Die Init-Skripte geben jedoch den Befehlsstatus aus, was in Shell-Skripten nützlich sein kann, um sie auszuführen und sofort den Status des Befehls zu erhalten.