Einen Dienst daran hindern, auf allen Runlevels zu starten?


61

Ich habe einen Dienst, fooder derzeit auf Runlevel 3 und höher startet . Wie kann ich das verhindern, ohne zu verwenden update-rc.d foo stop 3 ., was (wenn ich es richtig verstehe) den Dienst bei jedem Runlevelwechsel abschalten würde?

(Wenn ich also Runlevel 1 erreicht und aktiviert hätte foo, wäre es deaktiviert, wenn ich auf Runlevel 3 gewechselt wäre, nicht wahr ?)

Debian GNU / Linux Lenny ausführen.

Antworten:


57

Der Ausdruck "stop" verhindert nicht das Starten des Dämons, sondern fährt ihn herunter, während der angegebene Runlevel eingegeben wird.

Wenn Sie nur einen Dienst / Daemon von einem einzelnen Runlevel entfernen möchten, update-rc.dwie bei freiheit erwähnt, oder einfach den Symlink von entfernen möchten/etc/rcX.d/ , wobei X Ihr Runlevel ist. Wenn Sie nicht möchten, dass der Dienst automatisch gestartet update-rc.d -f foo removewird, erledigen Sie dies .


2
Irgendwelche Ideen, wie man es unter Debian 8 macht? sudo update-rc.d -f sunrpc removefunktioniert nicht; Es ist nach einem Neustart immer noch vorhanden.

Debian 9 Das hat bei mir nicht funktioniert, und dann wurde mir klar, oh derp, ich brauche sudo. update-rc.d gibt keine Rückmeldung, wenn Sie sudo vergessen haben. Ich bestätigte, dass die Links weg warenls /etc/rc*.d
Jason Dunkelberger

Der Befehl schlug auf Ubuntu16.04
Stephane

Stellen Sie sicher, dass Sie den richtigen Dienstnamen übergeben. Update-rc.d gibt Ihnen kein Feedback, wenn es nicht vorhanden ist.
Marcovtwout

Was ist, wenn Sie es später wieder aktivieren möchten? Die Antwort von @ "Not Now" ist besser, da Sie sie später deaktivieren und wieder aktivieren können. update-rc.d apache2 disable
Wadih M.


15

Kurz:

Es gibt keinen zuverlässigen Weg, dies schnell zu tun.

Lange:

Derzeit gibt es für Debian (Debian unstable vom 01.06.2012) keine verlässliche Möglichkeit, einen Dienst / Daemon konsistent zu deaktivieren. - Da ein Upgrade eines Daemon-Pakets bedingungslos "/etc/init.d/package restart" ausführt und für dieses Runlevel deaktiviert ist oder nicht.

Um sicherzustellen, dass ein Daemon nicht startet, können Sie:

  • deinstalliere es
  • Erstellen Sie eine lokale Umleitung des Skripts /etc/init.d/xyz (auf diese Weise wird es von keinem Tool gefunden).
  • Verwenden / missbrauchen Sie eine Konfigurationsdatei des entsprechenden Pakets, um ein vorzeitiges Beenden dieses Skripts zu provozieren (z. B. setzen Sie ein "Exit" in / etc / default / xyz, falls es aus dem Init-Skript stammt).
  • Suchen Sie in diesem Init-Skript nach vordefinierten "offiziellen" Möglichkeiten, um diesen Daemon nicht zu starten

Es gibt / gab (?) Einen Init-Policy-Etwas-Schritt für Init-Skripte in Debian, der diese fehlende Funktionalität füllen sollte. - Ich habe versucht, es zu benutzen, fand es kompliziert, fand einen Fehler und berührte es nie wieder.

Aktualisieren:

Wechseln Sie zu "systemd", einer Alternative zu "initd". Es gibt ein Debian-Paket, und Sie können einen Dienst folgendermaßen deaktivieren:

cd /etc/systemd/system
ln -s /dev/null xyz.service

1
+1 Dies ist eine so hilfreiche Antwort - und wenn ich nicht darauf gekommen wäre, wäre ich später gestochen worden - danke!

Kannst du unlink xyz.servicedas auch?
Jaggedsoft

@NextLocal, ich habe vergessen, warum ich das geschrieben habe, aber ich glaube, wenn ein Dienst über System V-Init-Skripte verfügt, systemdwerden sie verwendet. - Der Link sagt also, dass nicht nach ihnen gesucht werden soll.
Robert Siemer

Beachten Sie, dass das Bearbeiten der /etc/default/xyzDatei zum Hinzufügen von exitnicht verhindert, dass der Packager die Datei beim nächsten Upgrade mit der richtigen Version überschreibt. (Das Paket speichert Konfigurationsdateien und in den meisten Fällen werden Init-Skripte nicht als solche angesehen.) In den meisten Fällen würde dies also nicht helfen.
Alexis Wilke

Devuan kommt zur Rettung: Anstelle von systemd wird das klassische SysV rc.d / init.d-System verwendet (oder auch openrc, wenn sich jemand dafür entscheidet).
Csaba Toth

5

Führen Sie diesen Befehl aus

apt-get installiere rcconf

Nach der Installation führen Sie rcconf in SSH aus. Daraufhin wird ein Dialogfeld mit allen Diensten angezeigt, die für die Ausführung beim Systemstart festgelegt wurden. Wählen Sie diejenigen aus, indem Sie die Leertaste drücken, um sie zu deaktivieren / aktivieren. Wenn Sie fertig sind, klicken Sie einfach auf OK, und der Dienst wird beim nächsten Start nicht erneut gestartet. Ich benutze das seit Jahren. Sehr praktisches Tool für Debian / Ubuntu-Benutzer wie mich.


Einfach wie 1,2,3! Vielen Dank für dieses kleine Kommandozeilen-Tool.
DanielaWaranie

2

Ich bin verwirrt, was Sie erreichen wollen.

In welchen Runlevels soll foo laufen?

Wenn Sie immer möchten, dass es ausgeführt wird, verwenden Sie update-rc.d foo defaults; das stoppt es in 0, 1 und 6, während es in 2, 3, 4 und 5 läuft. (1 sollte nur eine Shell ausführen, 0 und 6 sind halt und rebooten)

Wenn Sie genau angeben möchten, in welchen Ausführungsebenen ausgeführt werden soll:

update-rc.d foo stop 0 1 6 3 . start 2 4 5 .


1

Starten Sie in Debian7 mit insserv

Alle Dienste und Runlevel-Informationen ausgeben

insserv --showall

Entfernen Sie die aufgelisteten Skripte aus allen Runlevels

insserv --remove [specify_script]

0

Ubuntus Bootup Manager ist eine Art sysv-rc-conf light , eine benutzerfreundlichere GUI-Version, und viele Leute, die diesen Thread lesen, werden das zu schätzen wissen.

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


0

Auf einem Red Hat-basierten System könnten Sie verwenden

chkconfig httpd off
chkconfig httpd --del

um den Server von Runlevels zu entfernen

auf debian-basierten systemen sollen alle dienste von den dateien im verzeichnis /etc/rc?.d/ gestartet werden. diese dateien haben dann einen symbolischen link zu den entsprechenden dateien im verzeichnis /etc/init.d/. Wenn Sie möchten, dass ein Dienst nicht standardmäßig gestartet wird, können Sie ihn im Verzeichnis /etc/rc?.d umbenennen / entfernen. Ihre Änderung bleibt beim Upgrade des Pakets erhalten, solange einer der Startlinks in einem der folgenden Verzeichnisse noch vorhanden ist die anderen (3,4 und 5) Verzeichnisse. Oder Sie können den Befehl update-rc.d verwenden, um die Verknüpfungen zu ändern. Wenn Sie den Dienst danach starten möchten, können Sie /etc/init.d/service_name start verwenden, wenn Sie den Start vom Ende weglassen Geben Sie die Optionen an, die verwendet werden können, z. B. Stoppen, Neustarten, Neuladen ...

Ich denke, Sie können sysv-rc-conf verwenden, um es zu deaktivieren.


Die Frage ist mit Debian markiert, nicht mit Fedora oder Red Hat.

0
sudo update-rc.d SERVICE disable

Wenn Sie Laufebenen angeben möchten.

sudo update-rc.d SERVICE disable|enable [S|2|3|4|5]

Denken Sie daran, den Dienst in den Namen des Programms zu ändern .

sudo service SERVICE restart

0

Warum sichern Sie das Startskript nicht woanders und entfernen es in der Datei /etc/init.d/? Wenn das Update-rc.d nicht funktioniert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.