Ich benutze die nette Funktion von systemd: Instantiated Services.
Gibt es eine einfache Möglichkeit, alle instanziierten Dienste mit einem Aufruf neu zu laden?
Beispiel: Ich möchte nicht alle so ausführen:
systemctl restart autossh@foo
systemctl restart autossh@bar
systemctl restart autossh@blu
Ich habe es versucht, aber das funktioniert nicht
systemctl restart autossh@*
Verwandte Themen: Starten Sie N Prozesse mit einer systemd-Servicedatei
Aktualisieren
Zuerst war ich von Instantiated Services fasziniert, aber später wurde mir klar, dass das Ausführen eines Konfigurationsverwaltungstools wie Ansible sinnvoller ist. Ich habe gelernt: Halten Sie die Werkzeuge einfach. Viele Tools beginnen mit der Implementierung von Bedingungsprüfungen (if .. else ...) und Schleifen. Zum Beispiel Webserver oder Mailserver Konfiguration. Dies sollte jedoch auf einer anderen (oberen) Ebene gelöst werden: dem Konfigurationsmanagement. Siehe: https://github.com/guettli/programming-guidelines#dont-use-systemd-instantiated-units
systemctl status 'autossh@*'
Ausgabe:autossh@\x2a.service - ... Active: inactive (dead)
Version:systemd 195
systemctl restart autossh@{1..2}
(mit jedem N anstelle von2
) verwenden, was etwas weniger allgemein ist, aber es startet auch die Prozesse, wenn dies der Fall istinactive (dead)
.Nicht schön, aber das funktioniert für Systeme mit einem alten Systemd:
Natürlich ist die Lösung von oben answer (
systemctl restart 'autossh@*'
) besser.quelle
cut
Analysiert möglicherweise das falsche Feld, falls in der Ausgabe von Listeneinheiten Dienste fehlschlagen.@weirdan Antwort ist korrekt, aber für bestimmte Distributionen fehlt etwas.
Für Centos 7 und ähnliches können Sie Folgendes tun:
ABER (start) funktioniert NUR, wenn Sie das Flag "--all" angeben:
Andernfalls werden die Dienste nicht gefunden, da sie nicht vorhanden sind. Dies ist eine vom System vorgesehene Funktion.
Bei Ubuntu- basierten Systemen funktioniert dies ziemlich genau so, aber der Unterschied besteht darin, dass das Flag "--all" für alle systemctl-Argumente angegeben werden muss, da es sonst nichts bewirkt.
quelle
Ich weiß nicht, ob es eine Option für ein Platzhalterzeichen auf dem Terminal für systemd gibt. Was Sie tun können, ist das Hinzufügen eines Skripts zu Ihren systemd-Skripten.
Das% i würde den Trick machen, den ich denke, hängt aber damit zusammen, wie Sie die instanziierten Dienste skripten.
Hier finden Sie eine Erklärung , die als Spezifizierer bezeichnet wird
was zeigt, dass:
Ich beantworte Ihre Frage nicht direkt, aber für das, was Sie wohl erreichen wollen. Wenn Sie der Meinung sind, dass Ihre Lösung nach dieser Idee gefunden werden könnte, teilen Sie uns bitte Ihr systemd-Skript mit, damit wir sie eventuell mit Beispielen veranschaulichen und Ihnen möglicherweise sogar das endgültige Skript zur Verfügung stellen können.
Wenn Sie sicher sind, dass Sie Ihr eigenes Skript bearbeiten, um eine Lösung auf diese Weise zu finden, finden Sie hier ein Beispiel (ich zitiere es nicht, da ich nicht weiß, ob es für die Lösung relevant ist und zu spezifisch für das ist, was ich ' Ich schlage vor)
quelle