GNU/Linux >> Belajar Linux >  >> Linux

Systemd:Menggunakan After dan Requires

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

Linux
  1. Centos – Systemd Membunuh Layanan Segera Setelah Mulai?

  2. Debian – Systemd:Layanan Tidak Memiliki Pengaturan Execstart=Dan Execstop=. Penolakan?

  3. Layanan Systemd Tidak Akan Memulai Nodejs?

  1. Mulai, Berhenti, dan Mulai Ulang Crond Daemon di Linux

  2. systemd:SIGTERM segera setelah start

  3. Cara memulai layanan systemd setelah pengguna masuk dan menghentikannya sebelum pengguna keluar

  1. systemctl menghentikan layanan Tomcat segera setelah dimulai

  2. Sistem menolak SSH dan macet saat 'boot up' setelah instalasi systemd

  3. Systemd Unit File - WantedBy dan After