Wie kann ich Dienste aktivieren oder deaktivieren?

821

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, besteht update-rc.ddarin, dem Start neue Dienste hinzuzufügen, die auf den /etc/init.dOrdner und dessen Inhalt abzielen .

Die andere, die ich gefunden habe, ist das Bearbeiten von .confDateien im /etc/initOrdner.

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?

NES
quelle
1
Informationen
Jorge Castro,
Dies wäre hilfreich für diejenigen, die auf Fedora 12 stecken und hier gelandet sind. Für den Fall, dass Linkrot das chkconfigist, wonach Sie suchen.
Bleeding Fingers
3
Beachten Sie, dass die Antwort für Ubuntu 14.04 hier noch fehlt.
Reinier Post
2
@MarcelloNuccio: Ab Ubuntu 15.04 ist Upstart zugunsten von Systemd veraltet.
Dan Dascalescu
Autostart-Programme werden in autostartManifesten oder in *.serviceDateien an mehreren Speicherorten sowie in init.doder konfiguriert crontab. Siehe: unix.stackexchange.com/a/525845/43233
Noam Manos,

Antworten:

831

Es gibt Dienste, die über die GUI (wie die startupAnwendung) 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:

Temporäres Aktivieren / Deaktivieren von Diensten

Um Dienste vorübergehend anzuhalten und zu starten (aktiviert / deaktiviert sie nicht für zukünftige Starts ), können Sie Folgendes eingeben service SERVICE_NAME. Zum Beispiel:

  • sudo service apache2 stop( Stoppt den Apache-Dienst bis zum Neustart oder bis zum nächsten Neustart).

  • sudo service apache2 start( Startet den Apache-Dienst unter der Annahme, dass er zuvor gestoppt wurde.)

  • service apache2 status (Zeigt den STATUS des Dienstes an, wenn er entweder aktiviert ist / läuft oder deaktiviert ist / NICHT läuft.)

  • sudo service apache2 restart(Wird den Dienst neu starten . Dies wird am häufigsten verwendet, wenn Sie eine Konfigurationsdatei geändert haben. In diesem Fall, wenn Sie entweder eine PHP-Konfiguration oder eine Apache-Konfiguration geändert haben. 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 Ihnen alle für diesen bestimmten Dienst verfügbaren Optionen angezeigt.) Dieser Aspekt variiert je nach Dienst. Bei MySQL wird dies beispielsweise nur erwähnt fehlt ein Parameter. Bei anderen Diensten wie Netzwerkdiensten wird die kleine Liste aller verfügbaren Optionen erwähnt.


SYSTEMD

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- Verwenden Sie es, um einen Dienst zu starten. Bleibt nach dem Neustart nicht bestehen

systemctl stop SERVICE- Verwenden Sie es, um einen Dienst zu stoppen. Bleibt nach dem Neustart nicht bestehen

systemctl restart SERVICE - Verwenden Sie es, 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 ein, beim nächsten Neustart oder beim nächsten Startereignis. 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 - Alle Informationen zum Dienst anzeigen.

sudo systemctl mask SERVICE- Deaktivieren Sie einen Dienst vollständig, indem Sie ihn mit verknüpfen /dev/null. Sie können den Dienst nicht manuell starten oder aktivieren.

sudo systemctl unmask SERVICE- Entfernt die Verknüpfung zu /dev/nullund stellt die Fähigkeit wieder her, den Dienst zu aktivieren und / oder manuell zu starten.


UPSTART (veraltet seit 15.04)

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 für veraltet start, stop, status& restart. 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 bei einem unbekannten Job einen Fehler melden .

Einige Verknüpfungen funktionieren möglicherweise nur mit dem serviceobigen Befehl, nicht jedoch mit den folgenden Befehlen, es sei denn, sie sind zu 100% in Upstart-Dienste konvertiert:

  • START -sudo start mysql

  • STOP -sudo stop mysql

  • NEUSTART -sudo restart mysql

  • STATUS -sudo status smbd

Aktivieren / Deaktivieren eines Dienstes

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 verhindert manual, dass Upstart den Dienst beim nächsten Start automatisch lädt. Jeder Dienst mit der .overrideEndung 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 die .override. Zum Beispiel:

echo manual | sudo tee /etc/init/mysql.override

Versetzt den MySQL-Dienst in den manualModus. 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 verwendet manual.

Luis Alvarado
quelle
Müssen Sie .servicezu jedem Befehl etwas hinzufügen ? systemctl mongod statushat prima funktioniert.
Dan Dascalescu
@DanDascalescu nein du nicht aber lass mich das dort klären.
Luis Alvarado
4
Soll die .override-Datei in /etc/init.d/ abgelegt werden, dh wo der Dienst abgelegt wird?
Obi Wan - PallavJha
Warum ist Upstart in 15.04 veraltet? Was ist der richtige Weg, um Skripte beim Starten / Neustarten in Ubuntu 16.04 oder höher auszuführen?
Kamalakannan J
1
Vielen Dank für diese umfassende Antwort. Der systemdBefehlssatz funktioniert unter Ubuntu 18.04.
Doktor J
355

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.dund es dann mit dem update-rc.dBefehl (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##xxxxund mit Dateinamen gestartet werden S##xxxx. Das ##in S##xxxxbedeutet eine "Startreihenfolge" für den Service xxxx. Im Gegensatz dazu der ##in K##xxxxbedeutet 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 apache2wurde nicht auf upstart konvertiert . Zum Deaktivieren führen apache2Sie einfach aus

sudo update-rc.d apache2 disable
sudo service apache2 stop

Deaktivieren Sie Dienste (Jobs) im Upstart

Upstart-Jobdefinitionen haben keinen update-rc.dBefehl. 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 onBedingung 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 <[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 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 onund stop onStrophen: 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 overrideDatei erstellen , um einen Dienst zu deaktivieren, ohne die Jobdefinition zu bearbeiten, indem Sie einfach das manualSchlüsselwort darin einfügen.

SpamapS
quelle
20
Sieht aus wie 11.04 hat auch überschreiben. So echo manual >> /etc/init/<service>.overridebevorzugt wird , da es die ursprüngliche Conf Filke intakt lässt. Trotzdem ist es immer noch eine Schande, dass die Entwicklung einer solchen grundlegenden Aktivierung / Deaktivierung 3 Jahre gedauert hat, und dafür gibt es keine grafische Benutzeroberfläche.
MestreLion
3
update-rc.d ist das, was wirklich zählt
Timofey
2
Das ursprüngliche Thema scheint viel mehr zu behandeln als die Antwort, die vom ursprünglichen Fragenplakat als defintive Antwort gekennzeichnet wurde. Vielen Dank! :)
Henning
1
In meinem Fall existiert die Datei /etc/init/ssh.confaber status sshund status sshdbeide sagen "Unbekannter Job". Diese Antwort scheint eine solche Möglichkeit nicht anzusprechen?
Brian Z
1
status sshgibt mir auch "Unbekannter Job", arbeitet aber service ssh statusfür mich
27.
129

sysv-rc-conf

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

Bildbeschreibung hier eingeben

Sie können weiter durch die Seiten navigieren, indem Sie Ctrl+nfür die nächste Seite und Ctrl+pfür die vorherige Seite verwenden. Sie können Dienste aktivieren und deaktivieren, indem Sie die SPACEgewünschten Runlevel auswählen .

Jobs-Admin

Eine weitere Alternative wäre Jobs-Admin durch Installation über

sudo apt-get install jobs-admin

Das bietet auch GUI davon

jobs-admin Vorschau

Um mehr Jobs anzuzeigen, müssen Sie das Kontrollkästchen Geschützte Jobs anzeigen in seinem Menü aktivieren.

chkconfig

Und dritte Option wäre chkconfig ,

sudo apt-get install chkconfig

Es kann über die CLI verwendet werden chkconfigund zeigt eine Liste der Ein / Aus-Jobs an. Wir können auch Systemdienste über anzeigenchkconfig –list

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>

update-rc.d

Und eine andere Option kann hier update-rc.d genannt werden , was hier kurz erklärt wird .

Beachten Sie, dass für Ubuntu Server 12.04 update-rc.d anstelle von chkconfig verwendet wird.

atenz
quelle
1
auf Ubuntu-Server:Package chkconfig is not available, but is referred to by another package.
Pwned
@pwned Sie können die aktualisierten Informationen zur Server-Edition bearbeiten und veröffentlichen. Vielen Dank.
Atenz
Ich habe getan, wie Sie vorgeschlagen haben, jetzt ist es für Peer Review.
Pwned
jobs-admin erlaubt keinen Jobwechsel (Ubuntu 14.04) und erstellt stattdessen einen Absturzbericht ;-)
Sadi
5
sysv-rc-conf ist nicht für die Verwendung mit upstart oder systemd geeignet, da es sich offenbar nur um das alte System 5 rc handelt, das unter Ubuntu Linux seit fast einem Jahrzehnt nicht mehr der Standard ist. Debian Bug # 791689 erkennt dies an und fragt, warum es nicht als mit systemd in Konflikt stehend markiert wurde.
JdeBP
48

Für diejenigen von uns, die Ubuntu über ssh ausführen, ist meiner Meinung nach die beste Option rcconf- ein textbasiertes Programm:

sudo apt-get install rcconf
sudo rcconf

Alt-Text

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 ebenfalls angezeigt wird sysv-rc-conf- 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 aufgelisteten Diensten /etc/init/*), sondern nur mit dem traditionellen Mechanismus ( ls -l /etc/init.d/*- denjenigen, 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.

jg-faustus
quelle
6
Funktioniert das noch mit Emporkömmling?
OKtosiTe
3
Unglücklicherweise nicht. Aber es hat in all den Fällen funktioniert, in denen ich etwas ändern wollte - die Upstart-Jobs scheinen hauptsächlich Dinge zu sein, die ich niemals deaktivieren möchte - Hardware-Uhr, Log-Daemon, Netzwerk usw. (zumindest auf Ubuntu-Servern). Aber es ist etwas zu beachten (ich war nicht :), ich habe den Beitrag aktualisiert.
jg-faustus
Leider wurde mysql auf upstart umgestellt. Und das ist ein Service, den ich nur benutze, wenn ich ein Projekt mache.
MestreLion
Es gibt einen Fehler mit rcconf unter Ubuntu 12.04, der das Starten des Programms verhindert. Um das Problem zu beheben, müssen Sie das Dialogpaket installieren.
Devius
1
Da diese Antwort geschrieben wurde, update-rc.dwurde sie geändert und einige ihrer veralteten Funktionen wurden entfernt . Debian-Fehler # 727735 stellt fest, dass rcconf nicht entsprechend geändert wurde. Und nein, rcconf funktioniert auch nicht mit systemd, so dass es in den letzten zehn Jahren für keines der Standard-Init-Systeme für Ubuntu Linux anwendbar war.
JdeBP
18

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
    
Postadelmaga
quelle
Aber es ist zu einfach, und nicht erlauben, "geschützte Jobs" zu ändern (Was ist das Jobbs? Apple hat Jobs, Betriebssystem hat Daemons!)
Kakaz
Ich erlaube nicht einmal, "ungeschützte Jobs" zu ändern (Ubuntu 14.04) und stattdessen einen Absturzbericht zu erstellen ;-)
Sadi
12

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 Sie einen Blick darauf werfen man 5 init, finden Sie eine geeignetere Lösung: Verwenden einer Überschreibungskonfiguration. Kurzes Beispiel: Angenommen, wir haben einen Dienst mit dem Namen "foobar", sodass eine Datei /etc/init/foobar.confmit ihrer Startkonfiguration aufgerufen wird . Jetzt möchten Sie diese Datei nicht entfernen oder ändern - aber Sie möchten auch nicht, dass dieser Dienst ausgeführt wird? So platzieren Sie eine Überschreibung Datei neben ihm: /etc/init/foobar.override, enthält (optional den Header mit der Beschreibung und) stattdessen die start on/ stop onLinien Sie eine Zeile mit einem Wort platzieren: manual. Auf diese Weise weisen Sie upstart an, grundsätzlich den zu verwenden foobar.conf, die Startdefinition jedoch zu überschreiben, um diesen Dienst nur dann zu starten, wenn er manuell erzwungen wird ( service foobar startin unserem Beispiel über).

Izzy
quelle
8

Es gibt auch den Boot-Up Manager .

Installieren: sudo apt-get install bum

Weitere Infos: http://www.marzocca.net/linux/bum.html

Bildbeschreibung hier eingeben

Sadi
quelle
1
Vergessen Sie nicht, die Schaltfläche "Erweitert" zu aktivieren.
not2qubit