So deaktivieren Sie einen Dienst ohne 'systemctl disable'

12

Es gibt einen Dienst, den ich nur ausführen möchte, wenn ein anderer Dienst ausfällt ( [Unit] OnFailure=foo), aber ich möchte nicht, dass dieser Dienst ( foo) beim Booten automatisch gestartet wird. Eine Option läuft systemctl disable foo, aber ich suche nach einem anderen Weg.

Hintergrund: Ich erstelle ein Betriebssystem-Image und möchte den Computer nicht starten, diesen Befehl ( systemctl disable foo) ausführen und dann herunterfahren müssen, bevor ich mein Image als endgültig deklariere.

Tshepang
quelle

Antworten:

4

Alle Dienste sind standardmäßig "deaktiviert". "Aktivierung" ist Opt-In.

Wenn foo.servicees sich um Ihren benutzerdefinierten Dienst handelt, wird er nur gestartet, wenn er explizit von etwas (wie der OnFailure=Direktive) abgerufen wurde, und Sie sollten nichts "deaktivieren".

intelfx
quelle
Im Grunde genommen "erhalten Sie diese Funktionalität kostenlos", es sei denn, foo wurde zuvor aktiviert?
Rogerdpack
25

systemctl enablefunktioniert durch Manipulieren von Symlinks in /etc/systemd/system/(für Systemdämonen). Wenn Sie enableeinen Dienst ausführen, werden die WantedByZeilen im [Install]Abschnitt angezeigt und Symlinks in diesen .wantsVerzeichnissen eingefügt .

systemctl disable macht das Gegenteil.

Sie können diese Symlinks einfach entfernen - dies von Hand zu tun ist völlig gleichbedeutend mit der Verwendung systemctl disable.

derobert
quelle
Dies wäre ein Dienst, der noch nicht von systemd ausgeführt wurde (es ist benutzerdefiniert), daher würde es keinen dieser zusätzlichen Symlinks geben. Ich vermute, diese würden beim ersten Start erstellt?
Tshepang
3
@ Tshepang sollte nicht aktiviert werden, es sei denn, Sie aktivieren es manuell (oder natürlich in einem Skript)
derobert
1
Oh, ich nahm an, dass es automatisch aktiviert wird (was ich durch die Installation von Debian-Paketen erwartet habe). Gut zu wissen.
Tshepang
3
@Tshepang, das ist das Postinst-Skript im Paket, das eine Aktivierung ausführt. Oder ich schätze, die Symlinks im Paket zu versenden, nicht sicher, ob sie das tun.
Derobert
4

Sie können systemctl start ServiceName.serviceund systemctl stop Service.Name.servicezum Starten bzw. Stoppen eines Dienstes verwenden. Im Gegensatz zu systemctl enable ...und systemctl disable ...dauern die Start- und Stoppbefehle nur für die aktuelle Sitzung. Wenn Sie den Computer neu starten, werden die Änderungen daher nicht gespeichert.

Tshepang
quelle