Frage Deaktivieren Sie alle Dienste außer ssh


Wie kann ich alle Dienste außer ssh auf modernen (Systemd) Linux-Distributionen deaktivieren?

Ich muss ein implementieren Wartungsmodus.

Alle diese Dienste müssen heruntergefahren werden:

  • Postgres
  • Postfix
  • Apache
  • Tassen
  • Cron
  • Taubenschlag

Aber ssh darf nicht heruntergefahren werden, da dies dazu dient, Aufgaben während des Wartungsmodus zu erledigen.

Natürlich könnte ich ein Shell-Skript schreiben, das eine Liste von Diensten durchläuft, die ich deaktivieren möchte. Aber das fühlt sich an, als erfinde ich etwas neu, was bereits existiert, was ich aber bisher nicht kenne.


30
2017-11-25 12:51


Ursprung


Welche Art von Aufgaben? Warum brauchst du das? - ewwhite
@ user430214 Ich habe die Frage aktualisiert. Ich fügte hinzu: Natürlich könnte ich ein Shell-Skript schreiben, das eine Liste von Diensten durchläuft, die ich deaktivieren möchte. Aber das fühlt sich an, als erfinde ich etwas neu, was bereits existiert, was ich aber bisher nicht kenne. - guettli


Antworten:


Das klingt sehr ähnlich Runlevel, Ersetzt mit Ziele in Systemd. Anstatt also ein Skript zu schreiben, das eine Liste von Diensten startet und stoppt, können Sie ein neues erstellen maintenance.target enthält nur die notwendigen Dienste, wie SSH. Natürlich ist SSH ohne Netzwerk nicht sehr nützlich, also in diesem Beispiel ein einfaches emergency-net.target ist modifiziert, um SSH einzuschließen.

[Unit]
Description=Maintenance Mode with Networking and SSH
Requires=maintenance.target systemd-networkd.service sshd.service
After=maintenance.target systemd-networkd.service sshd.service
AllowIsolate=yes

Dann könnten Sie Ihren Wartungsmodus mit eingeben

# systemctl isolate maintenance.target

und zurück

# systemctl isolate multi-user.target

53
2017-11-25 14:35



Vielen Dank für diese Antwort. Es zeigt mir, dass Fragen nützlich ist, auch wenn Sie denken, dass es keine nette Antwort gibt, außer ein schmutziges Shell-Skript zu schreiben. Das emergency-net.target ist eine einfache und elegante Lösung - großartig :-) - guettli
Dies ist sicherlich so, da es auch alle Abhängigkeiten berücksichtigt und Sie nicht jedes Mal das Skript aktualisieren müssen, wenn Sie einen neuen Dienst installieren. - Esa Jokinen


Listen Sie zuerst Ihre Dienste auf und suchen Sie nach den entsprechenden Systemd-Namen.

Erstellen Sie dann eine Liste und stoppen Sie jedes Listenmitglied, um die Wartung einzugeben. Starten Sie jedes Mitglied nach der Wartung.


4
2017-11-25 14:02



Warum nicht einfach benutzen systemctl isolate? - Chris Down