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