Sementara jawaban Umut benar, ada interaksi antara Requires= dan After= yang jarang diungkapkan. Dari systemd.unit#Requires=(penekanan ada pada saya):
Jika unit ini diaktifkan, unit yang terdaftar juga akan diaktifkan. Jika salah satu unit lain gagal diaktifkan, dan dependensi pengurutan
After=pada unit yang gagal disetel , unit ini tidak akan dimulai.
Intinya, ini berarti tanpa After= , kedua layanan akan dimulai jika foo.service dimulai (karena Requires= ), tetapi systemd tidak akan menghentikan foo.service jika bar.service tidak berhasil dimulai.
Namun, dengan tambahan After= , itu akan menunggu bar.service untuk memulai dengan sukses (dengan beberapa pengecualian; lihat catatan di Requires= docs) sebelum memulai foo.service dan tidak akan memulainya jika bar.service tidak dimulai.
Agak terkait adalah perbedaan antara Requires= dan BindsTo= (lihat dokumen di sekitar tautan di atas).
Tidak masalah menggunakan keduanya After= dan Requires= . Mereka memiliki tujuan yang berbeda. Requires= mengatur ketergantungan awal. systemd memastikan bahwa jika ada badan yang mencoba memulai foo.service, ia juga harus memulai bar.service. Jika bar.service gagal di beberapa titik, maka foo.service juga akan dihapus.
After= adalah menempatkan urutan awal antara layanan. Jika kedua layanan dijadwalkan untuk dimulai, maka After= memastikan urutan awal telah ditetapkan.
Anda dapat melihat file layanan systemd sendiri sebagai contoh.
/lib/systemd/system/basic.target
[Unit]
...
Requires=sysinit.target
After=sysinit.target
...