Ich habe gelesen, wie man Dienste in Ubuntu aktiviert und deaktiviert, und es scheint, dass es verschiedene Möglichkeiten gibt, sie zu verwalten.
Die erste Methode, die ich gefunden habe, ist update-rc.d
, um neue Dienste zum Start hinzuzufügen, die auf den Ordner /etc/init.d
und dessen Inhalt abzielen.
Die andere, die ich gefunden habe, ist die Bearbeitung von .conf
-Dateien im Ordner /etc/init
.
Was ist die empfohlene Methode zum Aktivieren/Deaktivieren/Hinzufügen von Diensten und warum?
Könnten Sie bitte ein kurzes, kugelsicheres, schrittweises Beispiel geben, wie man einen Dienst in Ubuntu hinzufügt und aktiviert und deaktiviert?
Es gibt Dienste, die über die GUI (wie die Anwendung startup
) oder das Terminal aktiviert/deaktiviert werden können.
Für das Terminal haben Sie mehrere Möglichkeiten. Öffnen Sie zunächst ein Terminal (geben Sie beispielsweise "terminal" in den Bindestrich ein und öffnen Sie es). Dann:
Um Dienste vorübergehend anzuhalten und zu starten (Aktiviert/deaktiviert sie nicht für zukünftige Starts), können Sie service SERVICE_NAME
eingeben. Zum Beispiel:
Sudo service Apache2 stop
(Will STOP den Apache-Dienst bis zum Neustart oder bis Sie ihn erneut starten).
Sudo service Apache2 start
(Will START der Apache-Dienst, sofern er zuvor gestoppt wurde.).
service Apache2 status
(Zeigt den STATUS des Dienstes an, wenn dieser entweder aktiviert ist/ausgeführt wird oder deaktiviert ist/NICHT ausgeführt wird.).
Sudo service Apache2 restart
(Will RESTART the service. Dies wird am häufigsten verwendet, wenn Sie eine Konfigurationsdatei geändert haben. In diesem Fall, wenn Sie entweder ein PHP geändert haben. Konfiguration oder eine Apache-Konfiguration. Durch einen Neustart müssen Sie nicht mit zwei Befehlszeilen anhalten/beginnen.)
service Apache2
(Da Sie in diesem Fall die auszuführende AKTION für den Dienst nicht erwähnt haben, werden alle für diesen bestimmten Dienst verfügbaren Optionen angezeigt.) Dieser Aspekt variiert je nach Dienst, z. B. mit MySQL Ich würde nur erwähnen, dass es einen Parameter fehlt. Bei anderen Diensten wie Netzwerkdiensten wird die kleine Liste aller verfügbaren Optionen erwähnt.
Ab Ubuntu 15.04 wird Upstart zugunsten von Systemd nicht mehr empfohlen. Mit Systemd zur Verwaltung der Dienste können wir Folgendes tun:
systemctl start SERVICE
- Zum Starten eines Dienstes. Bleibt nach dem Neustart nicht bestehen
systemctl stop SERVICE
- Verwenden Sie diese Option, um einen Dienst zu beenden. Bleibt nach dem Neustart nicht bestehen
systemctl restart SERVICE
- Verwenden Sie diesen Befehl, um einen Dienst neu zu starten
systemctl reload SERVICE
- Wenn der Dienst dies unterstützt, werden die zugehörigen Konfigurationsdateien erneut geladen, ohne dass ein Prozess unterbrochen wird, der den Dienst verwendet.
systemctl status SERVICE
- Zeigt den Status eines Dienstes an. Gibt an, ob gerade ein Dienst ausgeführt wird.
systemctl enable SERVICE
- Schaltet den Dienst beim nächsten Neustart oder beim nächsten Startereignis ein. Es bleibt nach dem Neustart bestehen.
systemctl disable SERVICE
- Deaktiviert den Dienst beim nächsten Neustart oder beim nächsten Stoppereignis. Es bleibt nach dem Neustart bestehen.
systemctl is-enabled SERVICE
- Überprüfen Sie, ob ein Dienst derzeit so konfiguriert ist, dass er beim nächsten Neustart gestartet wird oder nicht.
systemctl is-active SERVICE
- Überprüfen Sie, ob ein Dienst gerade aktiv ist.
systemctl show SERVICE
- Zeigt alle Informationen zum Dienst an.
Sudo systemctl mask SERVICE
- Deaktivieren Sie einen Dienst vollständig, indem Sie ihn mit /dev/null
verknüpfen. Sie können den Dienst nicht manuell starten oder aktivieren.
Sudo systemctl unmask SERVICE
- Entfernt die Verknüpfung zu /dev/null
und stellt die Fähigkeit wieder her, den Dienst zu aktivieren und/oder manuell zu starten.
Wenn wir die offizielle Upstart-Methode verwenden möchten (Beachten Sie, dass momentan nicht alle Dienste auf Upstart konvertiert wurden), können wir die folgenden Befehle verwenden:
status SERVICE
- Hier erfahren wir, ob ein konvertierter Dienst ausgeführt wird oder nicht. Beachten Sie, dass dies zugunsten von start
, stop
, status
& restart
veraltet ist. Es wird uns auch mitgeteilt, ob ein Dienst noch nicht auf upstart konvertiert wurde:
Ein konvertierter Dienst gibt normalerweise den aktuellen Status (Starten, Ausführen, Stoppen ...) und die Prozess-ID aus. Ein nicht konvertierter Dienst würde einen Fehler bezüglich eines nbekannten Jobs ausgeben.
Einige Verknüpfungen funktionieren möglicherweise nur mit dem obigen Befehl service
, nicht jedoch mit den folgenden Befehlen, es sei denn, sie werden zu 100% in Upstart-Dienste konvertiert:
START - Sudo start mysql
STOP - Sudo stop mysql
RESTART - Sudo restart mysql
STATUS - Sudo status smbd
Um zu verhindern, dass ein Dienst dauerhaft gestartet oder gestoppt wird, müssen Sie folgende Schritte ausführen:
echo manual | Sudo tee /etc/init/SERVICE.override
die Zeilengruppe manual
verhindert, dass Upstart den Dienst beim nächsten Start automatisch lädt. Jeder Dienst mit der Endung .override
hat Vorrang vor der ursprünglichen Dienstdatei. Sie können den Dienst anschließend nur manuell starten. Wenn Sie dies nicht möchten, löschen Sie einfach den .override
. Zum Beispiel:
echo manual | Sudo tee /etc/init/mysql.override
Versetzt den MySQL-Dienst in den manual
-Modus. Wenn Sie dies nicht möchten, können Sie dies anschließend einfach tun
Sudo rm /etc/init/mysql.override
und Neustart, damit der Dienst automatisch neu gestartet wird. Um einen Dienst zu aktivieren, müssen Sie ihn am häufigsten installieren. Wenn Sie Apache, Nginx, MySQL oder andere Programme installieren, werden diese nach Abschluss der Installation automatisch gestartet und bei jedem Neustart des Computers neu gestartet. Durch Deaktivieren wird, wie oben erwähnt, der Dienst manual
verwendet.
Derzeit gibt es drei verschiedene Möglichkeiten, um Software als Dienst in Ubuntu zu starten: SysV , Upstart und systemd . Ein Dienst wird hier als ein Programm definiert, das vom System im Hintergrund ausgeführt wird, im Gegensatz zu einem Programm, das direkt vom Benutzer gestartet und ausgeführt wird.
Die herkömmliche Methode zum Starten von Diensten unter Linux bestand darin, ein Skript in /etc/init.d
zu platzieren und es dann mit dem Befehl update-rc.d
(oder in RedHat-basierten Distributionen mit dem Befehl chkconfig
) zu aktivieren oder zu deaktivieren.
Dieser Befehl verwendet eine etwas komplizierte Logik, um in /etc/rc#.d
Symlinks zu erstellen, die die Reihenfolge beim Starten von Diensten steuern. Wenn Sie ls /etc/rc2.d
ausführen, können Sie die Reihenfolge sehen, in der Dienste mit einem Dateinamen wie K##xxxx
beendet und mit Dateinamen S##xxxx
gestartet werden. Der ##
in S##xxxx
bedeutet eine "Startreihenfolge" für den Service xxxx
. Umgekehrt bedeutet der ##
in K##xxxx
den Kill-Befehl für den Dienst xxxx
.
Ein Hauptproblem bei SysV war, dass beim Booten des Systems alles musste seriell nacheinander ausgeführt werden, was die Bootzeiten des Systems sehr verlangsamte . Es wurden Versuche unternommen, dies zu parallelisieren, aber sie waren willkürlich und schwer auszunutzen. Dies war der Hauptgrund, warum Upstart erstellt wurde.
Upstart verwendet Jobdefinitionsdateien in /etc/init
, um zu definieren, bei welchen Ereignissen ein Dienst gestartet werden soll. Während das System bootet, verarbeitet upstart verschiedene Ereignisse und kann dann mehrere Dienste gleichzeitig starten. Auf diese Weise können sie die Ressourcen des Systems voll ausnutzen, indem sie beispielsweise einen festplattengebundenen Dienst starten, während ein anderer CPU-gebundener Dienst ausgeführt wird oder während das Netzwerk auf die Zuweisung einer dynamischen IP-Adresse wartet.
Sie können alle Upstart-Jobdateien anzeigen, indem Sie ls /etc/init/*.conf
ausführen.
Lassen Sie mich hier einfach anhalten und sagen: Wenn Sie nicht wissen, was ein Dienst ist oder was er tut, deaktivieren Sie ihn NICHT!
Nicht alle Dienste wurden auf Upstart konvertiert. Während ich in den letzten Monaten im Serverteam von Canonical gearbeitet habe, habe ich eine Reihe von konvertierten Auftragsdateien bearbeitet. Das Schönste ist, dass man damit das gesamte Skript "magic" loswerden und einfach eine neue Datei einfügen kann nur wenige Befehle hier und da, um genau zu definieren, wie der Dienst gestartet werden soll, und nichts weiter. Bisher wurden jedoch nur einige traditionelle Netzwerkdienste wie squid und samba konvertiert.
Um herauszufinden, ob ein Dienst auf einem Neustart basiert, können Sie den Statusbefehl ausführen:
status servicename
Wenn es sich um einen Startjob handelt, wird Folgendes angezeigt:
$ status statd
statd start/running, process 942
Wenn dies nicht der Fall ist, sehen Sie etwas Ähnliches:
$ status Apache2
status: Unknown job: Apache2
In diesem Fall wurde Apache2
nicht in upstart konvertiert. Um Apache2
zu deaktivieren, müssen Sie nur ausführen
Sudo update-rc.d Apache2 disable
Sudo service Apache2 stop
Upstart-Jobdefinitionen haben keinen update-rc.d
-Befehl. Um den Job zu deaktivieren, müssen Sie die Jobdatei direkt bearbeiten, um sie zu deaktivieren. Hierfür gibt es zwei Möglichkeiten.
Wenn Sie es dennoch manuell starten möchten, müssen Sie die Bedingung start on
auskommentieren. Angenommen, Sie möchten Samba installieren, aber nicht automatisch starten. Hier ist die Jobdatei (in natty):
description "SMB/CIFS File Server"
author "Steve Langasek <[email protected]>"
start on local-filesystems
stop on runlevel [!2345]
respawn
pre-start script
RUN_MODE="daemons"
[ -r /etc/default/samba ] && . /etc/default/samba
[ "$RUN_MODE" = inetd ] && { stop; exit 0; }
install -o root -g root -m 755 -d /var/run/samba
end script
exec smbd -F
Um Samba zu deaktivieren, können Sie einfach einen #
vor den "start on local-filesystems
" setzen. Beachten Sie, dass es beim Booten zwar nicht wieder gestartet wird, Sie es diesmal jedoch mit beenden müssen
Sudo service smbd stop
Wenn Sie jedoch niemals wollen, dass Samba startet, würde ich vorschlagen, das Paket tatsächlich zu entfernen. Wenn Sie jedoch möchten, dass es installiert, aber nicht startfähig ist, können Sie auch Folgendes tun:
mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled
Ab der Version von upstart in 11.04 gibt es ein neues Schlüsselwort, das die Zeilengruppen start on
und stop on
deaktiviert: manual
. Eine andere Möglichkeit, den Dienst ab 11.04 zu deaktivieren, ist:
echo 'manual' | Sudo tee /etc/init/mysql.override
# command from root Shell
echo manual >> /etc/init/mysql.override
Sie können eine override
-Datei erstellen, um einen Dienst zu deaktivieren, ohne die Jobdefinition zu bearbeiten, indem Sie einfach das Schlüsselwort manual
eingeben.
Versuchen Sie es mit sysv-rc-conf
Sudo apt-get install sysv-rc-conf
und um die Dienste zu verwalten, führen Sie aus
Sudo sysv-rc-conf
Welches wird interaktive Fenster wie folgt öffnen
Sie können weiter durch die Seiten navigieren, indem Sie Ctrl+n
für die nächste Seite und Ctrl+p
für die vorherige Seite verwenden. Sie können Dienste aktivieren und deaktivieren, indem Sie auf den gewünschten Runleveln SPACE
auswählen.
Eine andere Alternative wäre Jobs-Admin durch Installation durch
Sudo apt-get install jobs-admin
Das bietet auch GUI davon
Um weitere Jobs anzuzeigen, müssen Sie das Kontrollkästchen Geschützte Jobs anzeigen in seinem Menü aktivieren.
Und dritte Option wäre chkconfig ,
Sudo apt-get install chkconfig
Sie kann über CLI chkconfig
verwendet werden und zeigt eine Liste der Ein/Aus-Jobs an. Außerdem können wir Systemdienste mit chkconfig –list
anzeigen.
Dienste können mit eingeschaltet werden
chkconfig <service> on
Dienste können mit deaktiviert werden
chkconfig <service> off
Und wir können sogar unseren eigenen Dienst hinzufügen, indem wir ein geeignetes Init-Skript mit geeigneten Überschriften verwenden.
chkconfig --add <service>
Und eine andere Option kann verwiesen werden hier update-rc.d , kurz erklärt hier .
Beachten Sie, dass für Ubuntu Server 12.04 update-rc.d
anstelle von chkconfig verwendet wird.
Für diejenigen von uns, die Ubuntu über ssh ausführen, ist die beste Option rcconf
- ein textbasiertes Programm:
Sudo apt-get install rcconf
Sudo rcconf
Navigieren Sie mit den Tabulatortasten und den Pfeiltasten und drücken Sie die Leertaste zum Aktivieren/Deaktivieren. Änderungen bleiben auch nach einem Neustart erhalten.
Screenshot aus diesem Blogpost , der auch sysv-rc-conf
zeigt - ein ähnliches Tool, mit dem Sie auch den Runlevel festlegen können. (Für diejenigen, die sich genug für Runlevel interessieren, um sie zu ändern :)
Leider funktioniert rcconf nicht mit upstart (in /etc/init/*
aufgeführte Dienste), sondern nur mit dem herkömmlichen Mechanismus (ls -l /etc/init.d/*
- diejenigen, die keine symbolischen Links sind).
Glücklicherweise wurden viele der Dienste, die für das Einspielen auf einen Server relevant sind (Apache, Tomcat, mdadm, boinc-client ...), noch nicht auf den Upstart verschoben.
Ich fand heraus, dass es dieses GUI-Tool gibt, das BUM ähnelt, aber mit Upstart kompatibel ist:
Jobs-Admin
Sudo apt-get install jobs-admin
Das Bearbeiten der vorhandenen Upstart-Konfigurationsdatei (wie oben beschrieben) ist keine gute Idee. Ein aktualisiertes Paket könnte eine aktualisierte Konfiguration enthalten, und Sie mussten Ihre Änderungen immer wieder wiederholen.
Wenn man sich man 5 init
ansieht, findet man eine passendere Lösung: die Verwendung einer Override-Konfiguration. Kurzes Beispiel: Nehmen wir an, wir haben einen Dienst mit dem Namen "foobar", sodass es eine Datei mit dem Namen /etc/init/foobar.conf
mit ihrer Startkonfiguration geben würde. Jetzt möchten Sie diese Datei nicht entfernen oder ändern - aber Sie möchten auch nicht, dass dieser Dienst ausgeführt wird? Platzieren Sie also eine überschreiben Datei daneben: /etc/init/foobar.override
, die (optional die Überschrift mit der Beschreibung und) stattdessen die start on
/stop on
Zeilen enthält, mit denen Sie eine Zeile platzieren mit einem Wort: manual
. Auf diese Weise weisen Sie upstart an, grundsätzlich den foobar.conf
zu verwenden, aber die Startdefinition zu überschreiben, um diesen Dienst nur bei manueller Erzwingung zu starten (in unserem Beispiel über service foobar start
).
Es gibt auch den Boot-Up Manager .
So installieren Sie: Sudo apt-get install bum
Weitere Infos: http://www.marzocca.net/linux/bum.html
Ich benutze Stacer. Es zeigt auch Dienste und Prozesse. Eine vollständige Toolbox für das GUI-System. https://github.com/oguzhaninan/Stacer