Ubuntu12.04: So deaktivieren Sie einen Daemon-Prozess beim Start

23

Normalerweise verwende ich service start/stopoder initctl start/stop, um einen Dämonprozess zu starten oder zu stoppen, aber jetzt suche ich, um zu verhindern, dass ein Dämonprozess beim Start gestartet wird mysqld.

Derzeit wird in umbenannt /etc/init/mysql.conf, /etc/init/mysql.conf.bakaber nachdem ich ein wenig darüber gelesen habe, wurde systemdmir klar, dass dies eine enable & disableOption für die obige Aufgabe darstellt.

Also, gibt es etwas ähnliches in Ubuntu 12.04 mit upstart.

RanRag
quelle
Sie sagen, Sie verwenden systemd? Ich benutze es auf meinem Fedora 17 Computer. systemctl [enable|disable|is-enabled] mysqld.service
BenjiWiebe
1
@BenjiWiebe: Nein, ich benutze nicht systemd. Ich benutze upstart, weil systemd in Ubuntu 12.04 / 12.10 nicht die Standardeinstellung ist.
RanRag
1
Oh, ich verstehe jetzt ... Ich bin mir nicht sicher, was ich dachte.
BenjiWiebe

Antworten:

26

Sie können Dienste deaktivieren, indem Sie den folgenden Befehl ausführen:

sudo update-rc.d -f <service name> disable

Manpage- Auszug:

Bei Ausführung mit den Optionen disable [S | 2 | 3 | 4 | 5] ändert update-rc.d vorhandene Runlevel-Links für das Skript /etc/init.d/name, indem Start-Links umbenannt werden, um Links mit der gleichen Sequenznummer zu stoppen auf die Differenz von 100 minus der ursprünglichen Sequenznummer.

Mark Cohen
quelle
2
Ich habe nicht genug Reputation, um dies abzustimmen, und es wäre ohnehin unhöflich, dies ohne Erklärung zu tun, also nur ein Kommentar: Die Frage von @Noob bezieht sich auf Ubuntu 12.04, das die Konfiguration Upstart (/etc/init/*.conf) verwendet Dateien) für die meisten System-Daemons (wie von @Noob erwähnt), während Ihr Vorschlag nur für Daemons funktioniert, die Skripte in /etc/init.d/* (dem alten SysV-Stil) verwendet haben. Edit: Für die Aufzeichnung hat warl0ck die richtige Antwort (danke!).
Xolox
3
Die Frage bezieht sich auf eine hypothetische oder allgemeine Situation, in der mysql als besonderer aktueller Fall verwendet wird. OP schien sich dieser Antwort zumindest teilweise bewusst zu sein, aber es mag der Nachwelt gut dienen, zu bemerken, dass einige nützliche Pakete das Upstart-Format nicht respektieren und nicht respektieren (wie webmin und viele selbstgebaute Quellpakete zum Zeitpunkt des Kommentars). . Dies bedeutet, dass diese Methode eine gültige Teilantwort für den Kontext sein kann, ähnlich wie es die Antworten von warl0ck und Markus tun, um den bestimmten Punkt des hypothetischen mysql-Dienstes zu adressieren, der mit einem Paketmanager installiert wird.
JustinC
Das Flag -f wird nicht benötigt.
Dannyman
20

Die richtige Methode zum Deaktivieren und Starten des Dienstes ist das Erstellen einer XX.override-Datei.

echo 'manual' > /etc/init/mysqld.override

Auf diese Weise wird der Startdienst nicht automatisch gestartet

Gänseblümchen
quelle
Funktioniert das noch mit Ubuntu 12.04?
RSK
@RSK ja, warum probierst du es nicht einfach aus?
Daisy
1
Ich habe es versucht und nicht für mich gearbeitet. Lass es mich nochmal versuchen und werde dich aktualisieren.
RSK
Nein, es funktioniert nicht mit Ubuntu-14.04.
Hi-Angel
1
@RSK yes, why don't you just give it a try?Ich nehme an, weil es sehr unpraktisch ist, das System mit "einem Versuch" zu jedem Hinweis von dieser Seite neu zu starten.
User907860
7

@ warl0ck hat es richtig gemacht; Ich wollte hinzufügen, dass diese Informationen in der Upstart-Dokumentation ziemlich gut dokumentiert sind: http://upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting

Speziell:

Mit Upstart 1.3 können Sie Überschreibungsdateien und die manuelle Zeilengruppe verwenden, um auf einfachere Weise dasselbe Ergebnis zu erzielen [27]:

# echo "manual" >> /etc/init/myjob.override

Beachten Sie, dass Sie auf diese Weise den gleichen Effekt erzielen können:

# echo "manual" >> /etc/init/myjob.conf

Mit der Funktion zum Überschreiben können Sie jedoch die ursprüngliche Auftragskonfigurationsdatei unverändert lassen.

Um zum ursprünglichen Verhalten zurückzukehren, löschen Sie die Überschreibungsdatei oder benennen Sie sie um (oder entfernen Sie die manuelle Zeilengruppe aus Ihrer ".conf" -Datei).

Mark Glossop
quelle
5

Es gibt auch eine nette Software, die dabei hilft. Es heißt rcconf.

Einfach herunterladen mit:

sudo apt-get install rcconf

und benutze es mit dem Befehl

rcconf

Sie erhalten eine schöne (Kommandozeilen-) Oberfläche zum Deaktivieren / Aktivieren von Diensten.

delh
quelle
Dies ist nicht im System enthalten, daher ist die Installation weiterer Komponenten keine bessere Antwort.
m3nda
aber wirklich nützlich: D
Magico
1

Navigieren Sie zu dem /etc/rc2.d, was Sie beim Start nicht ausführen möchten , und benennen Sie es um: Ändern Sie das (anfängliche, große) "S" in ein "K" (z . B. S02mysqlin K02mysql). Wenn Sie es sich anders überlegen, kehren Sie es einfach um. Ich denke, die 2 bezieht sich auf Runlevel. In diesem Fall ist 2 das standardmäßige Mehrbenutzer-Runlevel. Wahrscheinlich haben Sie dort das meiste Zeug für den täglichen Computergebrauch.

Bearbeiten : Lesen Sie den Kommentar von James O'Gorman unten.

Emanuel Berg
quelle
1
Ja '2' bezieht sich auf den Run-Level. Sie können Ihren aktuellen Runlevel mit who -roder überprüfen runlevel.
RanRag
Das stimmt who --runlevel.
Emanuel Berg
1
Dies erreicht zwar das, was Sie wollen, ist aber technisch gesehen das Falsche. In SysV-Init-Begriffen sind 'S'-Skripte Startskripte und' K 'Kill-Skripte - dh S werden beim Start der Reihe nach ausgeführt und K wird beim Herunterfahren der Reihe nach ausgeführt (oder es wird zu einem niedrigeren Runlevel gewechselt).
James O'Gorman
@ JamesO'Gorman: Interessant, ich bin auf Debian, sagen Sie, dass meine "K-Skripte" beim Herunterfahren ausgeführt werden? Gibt es einen Buchstaben, der verwendet werden könnte, um das Skript völlig ohne jede Gefahr zu deaktivieren? (Es ist praktisch, sie im selben Ordner zu behalten, falls sich eine neue Situation ergibt, in der Sie sie haben möchten.)
Emanuel Berg
@EmanuelBerg Ja, initbeim Herunterfahren wird "KXXscript stop" ausgeführt. Sie sollten entweder den Symlink entfernen oder das Ausführungsbit aus dem eigentlichen Init-Skript entfernen. Ich glaube, dass Debian verwendet update-rc.d, um dies zu verwalten. RHEL (und Derivate) verwenden chkconfig.
James O'Gorman
0

Bei Upstart liegt die Dienstkonfiguration in Dateien in /etc/init/. Zum Beispiel wird ssh über eine Konfigurationsdatei gesteuert/etc/init/ssh.conf

Diese Datei gibt die "Ereignisse" an, die Upstart auffordern, den "Job" zu starten.

Um zu verhindern, dass ein Dienst automatisch
gestartet wird , können Sie eine der folgenden Methoden verwenden: a) Benennen Sie die Datei service.conf so um, dass sie nicht mit .conf endet.
B) Kommentieren Sie die Zeile "start on" aus der Datei service.conf aus.

In neueren Versionen von upstart (mindestens seit Version 1.3) können Sie den Start auch online mithilfe einer service.override-Datei außer Kraft setzen, sodass Sie Folgendes verwenden können:
# echo manual > /etc/init/service.override

Zuletzt können Sie auch das Schlüsselwort "manual" am Ende der Konfigurationsdatei des Dienstes hinzufügen, z. B .:
# echo manual >> /etc/init/service.conf

Beachten Sie, dass dies den ausgeführten Dienst nicht "stoppt", sondern nur verhindert, dass er automatisch gestartet wird. Während der Einstellung für "manuellen" Start steuern Sie den Dienst mit initctl, um z. B. den SSH-Dämon zu stoppen und zu starten:
# initctl stop ssh
# initctl start ssh

Die wohl beste Dokumentation für Upstart ist bei http://upstart.ubuntu.com/cookbook/

Abschnitt 11.44 behandelt "Deaktivieren eines Dienstes für den automatischen Start", hier: http://upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting

Johan
quelle
0

Nun, ich muss sagen, dass die Aussage

echo "manual" >> /etc/init/myjob.override

ist ein wenig irreführend, weil es bedeutet, die Überschreibungsdatei anzufügen. Ich habe dies am 14.04 mit dem Netzwerk-Manager getestet und folgendes hat nicht funktioniert

vim /etc/init/network-manager.override:
start
manual

Dies funktionierte jedoch

vim /etc/init/network-manager.override:
#start
manual

Also, IMO, sucht das initctl nach der ersten unkommentierten Zeile und führt sie aus. Vielleicht irre ich mich, aber das waren meine Testergebnisse. Beiträge sind willkommen.

infoclogged
quelle