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
...