I když je Umutova odpověď správná, existuje interakce mezi Requires=
a After=
to se málokdy píše. From systemd.unit#Requires=(důraz je můj):
Pokud bude tato jednotka aktivována, budou aktivovány i uvedené jednotky. Pokud se některá z dalších jednotek neaktivuje, a závislost na objednávce
After=
na vadné jednotce je nastaven , tato jednotka se nespustí.
V podstatě to znamená, že bez After=
, obě služby budou spuštěny, pokud foo.service
je spuštěno (kvůli Requires=
), ale systemd nezastaví foo.service
pokud bar.service
nespustí úspěšně.
Nicméně s přidaným After=
, bude čekat na bar.service
úspěšně spustit (až na některé výjimky; viz poznámka v Requires=
docs), než začne foo.service
a nespustí jej, pokud bar.service
nespustí se.
Poněkud související je rozdíl mezi Requires=
a BindsTo=
(viz dokumenty kolem odkazu výše).
Je naprosto v pořádku použít obě After=
a Requires=
. Mají různé účely. Requires=
nastaví závislost spuštění. systemd zajišťuje, že pokud se jakýkoli subjekt pokouší spustit foo.service, měl by také spustit bar.service. Pokud bar.service v určitém okamžiku selže, pak je také zrušena služba foo.service.
After=
zadává startovací příkaz mezi službami. Pokud je naplánováno spuštění obou služeb, pak After=
zajistí, že je nastaveno počáteční pořadí.
Jako příklad se můžete podívat na vlastní servisní soubor systemd.
/lib/systemd/system/basic.target
[Unit]
...
Requires=sysinit.target
After=sysinit.target
...