Derzeit gibt es drei verschiedene Möglichkeiten, um Software als Dienst in Ubuntu, SysV , Upstart und systemd zu starten . 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.
SysV
Die herkömmliche Methode zum Starten von Diensten unter Linux bestand darin, ein Skript zu platzieren /etc/init.d
und es dann mit dem update-rc.d
Befehl (oder in RedHat-basierten Distributionen chkconfig
) zu aktivieren oder zu deaktivieren.
Dieser Befehl verwendet eine etwas komplizierte Logik, um Symlinks zu erstellen /etc/rc#.d
, die die Reihenfolge beim Starten von Diensten steuern. Wenn Sie ausführen ls /etc/rc2.d
, können Sie die Reihenfolge sehen, in der Dienste mit einem Dateinamen wie dem abgebrochen K##xxxx
und mit Dateinamen gestartet werden S##xxxx
. Das ##
in S##xxxx
bedeutet eine "Startreihenfolge" für den Service xxxx
. Im Gegensatz dazu der ##
in K##xxxx
bedeutet die Abtötung , um für den Dienst xxxx
.
Ein Hauptproblem bei SysV war, dass beim Booten des Systems alles seriell nacheinander ausgeführt werden musste, 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.
Emporkömmling
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 ausführen ls /etc/init/*.conf
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 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 eine Handvoll traditioneller Netzwerkdienste wie Squid und Samba konvertiert.
Ist ein Dienst einsatzbereit?
Um herauszufinden, ob ein Dienst auf einem Neustart basiert, können Sie den Statusbefehl ausführen:
status servicename
Wenn es sich um einen Upstart- Job 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 apache2
wurde nicht auf upstart konvertiert . Zum Deaktivieren führen apache2
Sie einfach aus
sudo update-rc.d apache2 disable
sudo service apache2 stop
Deaktivieren Sie Dienste (Jobs) im Upstart
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 start on
Bedingung auskommentieren. Angenommen, Sie möchten Samba installieren , lassen es jedoch nicht automatisch starten. Hier ist die Jobdatei (in natty):
description "SMB/CIFS File Server"
author "Steve Langasek <steve.langasek@ubuntu.com>"
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 ein #
vor das " 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
Deaktivieren eines Dienstes mithilfe der Zeilengruppe "start / stop" (ab 11.04)
Beginnend mit der Version von Emporkömmling, der in 11,04 sein wird, gibt es ein neues Schlüsselwort , das die deaktiviert start on
und stop on
Strophen: 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 manual
Schlüsselwort darin einfügen.