An anderer Stelle hatte ich einen Text-Schnippsel aus der Man-Page zu service-units zitiert... hier ist der ganze Absatz:
"Conflicts=
A space-separated list of unit names. Configures negative requirement dependencies. If a unit has a Conflicts= setting on another unit, starting the former will stop the latter and vice versa. Note that this setting is independent of and orthogonal to the After= and Before= ordering dependencies.
If a unit A that conflicts with a unit B is scheduled to be started at the same time as B, the transaction will either fail (in case both are required part of the transaction) or be modified to be fixed (in case one or both jobs are not a required part of the transaction). In the latter case, the job that is not the required will be removed, or in case both are not required, the unit that conflicts will be started and the unit that is conflicted is stopped.
...worauf niemand erklärt hat:
Ich habe darauf auch noch mal geantwortet und mich anschließend mit meiner eigenen Antwort beschäftigt.... ich wollte das doch noch mal verifizieren. Und shit... am liebsten würde ich meine dortige Antwort jetzt ungeschehen machen. Denn offensichtlich bin ich da wieder einer Fehlinterpretation aufgesessen. Ich konnte diesen async-Sachverhalt mit zwei neuen Test-Units nicht bestätigen und bin anscheinend wieder am Anfang meiner fehlenden Grundlagen.niemand hat geschrieben:Conflicts=… ist eine Option in der Konfiguration, die man halt setzen kann, wenn man weiß, dass die Unit nicht zeitgleich mit einer Anderen laufen kann (welche eben angegeben wird). Damit wird auch der Rest verständlich, und es zeigt auch gut das häufig beobachtbare Problem: speziellere Sachen ohneWann und wodurch besteht oder ensteht ein Conflict?
Grundlagen zu verstehen, ist schwierig.
Das mit Conflicts und zwei Units ist einfach reproduzierbar.... die im Conflict stehende Unit wird einfach nicht gestartet. Aber ich habe dennoch Fragen, für die ich selber keine Antwort oder plausible Erklärung finden kann. Was bedeutet dieser spezielle Satz im obigen Zitar: "If a unit has a Conflicts= setting on another unit, starting the former will stop the latter and vice versa." Der"former" stoppt die letztere und umgekehrt. Was "umgekehrt"...?... . genau dieses "umgekehrt" hat mich anscheinend auf die falsche Fährte mit dem async-Rückschlus geführt.... was aber offensichtlich quatsch ist.
Und warum funktioniert meine Unit nur mit dem Conflicts-Statement, obwohl der Unit-Start und die beiden Targets umount und shutdown weit auseinander liegen:
Code: Alles auswählen
[Unit]
Description=thlu:varlog.service: Redirect /var/log to mountpoint
DefaultDependencies=no
Before=systemd-journald-dev-log.socket local-fs.target umount.target shutdown.target
Conflicts=umount.target shutdown.target
[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/usr/local/bin/varlog start
ExecStop=/usr/local/bin/varlog stop
TimeoutSec=30
[Install]
WantedBy=local-fs.target