Wie teilen Sie systemd mit, dass ein Ziel eine der Anforderungen erfüllt?

Wie teilen Sie systemd mit, dass ein Ziel eine der Anforderungen erfüllt?

Wie erkennen Sie systemd, ob eine Anforderung mit einer beliebigen Instanz aus einer Liste von Instanzen erfüllt ist?

Angenommen, ich habe ein Ziel namens main_target.targetund eine Servicevorlage namens [email protected]. Während des normalen Betriebs sind davon nur folgende Instanzen [email protected]vorhanden:

  • serv@ex1
  • serv@ex2
  • serv@ex3

Nureinsdieser Instanzen existieren zu einem bestimmten Zeitpunkt, und ich möchte sagen, main_target.targetdass sie erfüllt ist, wann immerbeliebigder drei Instanzen existieren.

Intuitiv hätte ich gerne etwas Ähnliches wie das SMF- require_anyTag, aber ich konnte in der gesamten systemdDokumentation nichts dergleichen finden.

Hinweis 1: Ich weiß, dass ich mit der Direktive serv@ex1, serv@ex2, serv@ex3und gegenseitig ausschließend machen kann Conflicts=.

Before=Hinweis 2: Ich weiß auch, dass ich die Anweisungen und verwenden kann, After=um die drei Instanzen so zu klassifizieren, dass sie in einer bestimmten Reihenfolge gestartet werden.

Antwort1

Wie Sie erwähnen, können Sie die Dienste mit der Direktive gegenseitig ausschließen Conflicts=. Die systemdZiele sind nur eine Methode zum Gruppieren von Einheiten, sie haben keine komplexen Abhängigkeitsoptionen.

systemd.target

Eine Unit-Konfigurationsdatei, deren Name auf „.target“ endet, kodiert Informationen zu einer Zielunit von systemd, die zum Gruppieren von Units und als bekannte Synchronisierungspunkte beim Start verwendet werden.

Dieser Unit-Typ hat keine speziellen Optionen. Siehe systemd.unit(5) für die gemeinsamen Optionen aller Unit-Konfigurationsdateien. Die gemeinsamen Konfigurationselemente werden in den allgemeinen Abschnitten [Unit] und [Install] konfiguriert. Ein separater Abschnitt [Target] existiert nicht, da keine zielspezifischen Optionen konfiguriert werden können.

systemd.unitals Referenz.

Sie können nur in enthaltene Anweisungen verwenden systemd.unit. Eine Methode zum Starten nur eines von mehreren Diensten ist nicht enthalten.

verwandte Informationen