Option „After=“ funktioniert nicht in der Systemd-Dienstdatei

Option „After=“ funktioniert nicht in der Systemd-Dienstdatei

Ich habe zwei Shell-Skripte namens first.sh und second.sh. Die Inhalte von first.sh und second.sh sind unten aufgeführt:

    >>first.sh
    #!/bin/bash
    while true
    do 
        echo The current time is $(date)
        sleep(1)
    done



    >>second.sh
    #!/bin/bash
    while true
    do 
        echo The current time from second script is $(date)
        sleep(1)
    done

Entsprechend lautet der Inhalt von first.service:

[Unit]
Description=first service
After=second.service
[Service]
ExecStart=/home/abanstola/first.sh

Der Inhalt von second.service ist:

[Unit]
Description=Second service
[Service]
ExecStart=/home/abanstola/second.sh

Beachten Sie den After=second.serviceCode von first.service. Laut Dokumentation sollte der erste Dienst erst laufen, wenn der zweite Dienst gestartet ist. Aber selbst wenn ich den zweiten Dienst deaktiviere oder stoppe, läuft der erste Dienst ohne Probleme. Was mache ich hier falsch?

Antwort1

Sie haben die Dokumentation falsch gelesen.Zitat:

Wenn die Einheit foo.servicedie Einstellung enthältBefore=bar.service und beide Einheiten werden gestartet, bar.servicewird der Start verzögert, bis foo.serviceder Startvorgang abgeschlossen ist. After=ist das Gegenteil von Before=

Von mir hervorgehoben. Dies hat nur einen Effekt, wenn beide Einheiten gestartet werden. Wenn Sie eine davon deaktivieren, hat dies keine Auswirkung.

Es ist nicht ganz klar, was du eigentlich willst.

Die bessere Wahl ist wahrscheinlich:

Requires=

Ähnlich wie Wants=, deklariert aber eine stärkere Anforderungsabhängigkeit. Abhängigkeiten dieses Typs können auch konfiguriert werden, indem ein symbolischer Link zu einem .requires/Verzeichnis hinzugefügt wird, das der Unit-Datei beiliegt.

Wenn diese Einheit aktiviert wird, werden auch die aufgelisteten Einheiten aktiviert. Wenn die Aktivierung einer der anderen Einheiten fehlschlägt und eine Reihenfolgeabhängigkeit After=von der fehlerhaften Einheit festgelegt ist, wird diese Einheit nicht gestartet. Außerdem After=wird diese Einheit mit oder ohne Angabe von gestoppt, wenn eine der anderen Einheiten explizit gestoppt wird.

PartOf=

Konfiguriert Abhängigkeiten ähnlich zu Requires=, jedoch beschränkt auf das Stoppen und Neustarten von Einheiten. Wenn systemd die hier aufgelisteten Einheiten stoppt oder neu startet, wird die Aktion an diese Einheit weitergegeben. Beachten Sie, dass dies eine Einwegabhängigkeit ist – Änderungen an dieser Einheit wirken sich nicht auf die aufgelisteten Einheiten aus.

verwandte Informationen