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.

lfaraone
quelle

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 .

PEra
quelle
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.
54

Konfigurieren Sie Linux-Startanwendungen mit sysv-rc-conf :

apt-get install sysv-rc-conf

Wie bereits erwähnt, ist hier auch update-rc.d für die cmd-Zeile.

Führen Sie beispielsweise aus

update-rc.d apache2 disable

um apache2 von allen laufebenen zu deaktivieren.

Nicht jetzt
quelle
tolles Tool - wusste nichts davon. Vielen Dank!
PEra
1
Beachten Sie, dass dies den laufenden Dienst nicht anhält, um dies zu erreichen: service foo stopoder starten Sie den Server neu
rubo77
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
Robert Siemer
quelle
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.

Mark Levinsky
quelle
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 .
freiheit
quelle
2

Ich denke, das würde den Job machen: insserv -r foo

user38551
quelle
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]
Kakao
quelle
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


quelle
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.

Nager43
quelle
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
Eddie
quelle
0

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

Kosaka Honoka
quelle