Systemd: Membutuhkan vs keinginan

15

Apakah ada perbedaan antara Membutuhkan vs Ingin dalam file target?

[Unit]
Description=Graphical Interface 
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service

Terima kasih

Iewicz
sumber
2
Lihatman systemd.unit
heemayl

Jawaban:

11

Seperti yang Heemayl catat dalam komentar, halaman manual menjawab pertanyaan Anda. Dari web:

Mau =

Versi yang lebih lemah dari Memerlukan =. Unit yang tercantum dalam opsi ini akan dimulai jika unit konfigurasi adalah. Namun, jika unit yang terdaftar gagal untuk memulai atau tidak dapat ditambahkan ke transaksi, ini tidak berdampak pada validitas transaksi secara keseluruhan. Ini adalah cara yang disarankan untuk menghubungkan start-up dari satu unit ke awal dari unit lain.

Dan Membutuhkan =:

Mengkonfigurasi dependensi persyaratan pada unit lain. Jika unit ini diaktifkan, unit yang tercantum di sini juga akan diaktifkan. Jika salah satu unit lain dinonaktifkan atau aktivasi gagal, unit ini akan dinonaktifkan. Opsi ini dapat ditentukan lebih dari sekali atau beberapa unit yang dipisahkan ruang dapat ditentukan dalam satu opsi di mana dependensi persyaratan kasus untuk semua nama yang terdaftar akan dibuat. Perhatikan bahwa dependensi persyaratan tidak memengaruhi urutan layanan dimulai atau dihentikan. Ini harus dikonfigurasi secara independen dengan opsi Setelah = atau Sebelum =. Jika unit foo.service membutuhkan unit bar.service yang dikonfigurasikan dengan Membutuhkan = dan tidak ada pemesanan yang dikonfigurasikan dengan After = atau Sebelum =, maka kedua unit akan dimulai secara bersamaan dan tanpa penundaan di antara mereka jika foo.service diaktifkan. Sering,

Perhatikan bahwa tipe dependensi ini tidak menyiratkan bahwa unit lain selalu harus dalam keadaan aktif ketika unit ini berjalan. Khususnya: pemeriksaan kondisi gagal (seperti ConditionPathExists =, ConditionPathExists =, ... - lihat di bawah) tidak menyebabkan pekerjaan awal dari unit dengan ketergantungan Memerlukan = pada gagal. Selain itu, beberapa tipe unit dapat dinonaktifkan sendiri (misalnya, proses layanan dapat memutuskan untuk keluar dengan bersih, atau perangkat mungkin dicabut oleh pengguna), yang tidak disebarkan ke unit yang memiliki dependensi Membutuhkan =. Gunakan BindsTo = tipe dependensi bersama dengan After = untuk memastikan bahwa suatu unit mungkin tidak pernah dalam keadaan aktif tanpa unit lain yang spesifik juga dalam keadaan aktif (lihat di bawah).

Dari halaman freedesktop.org

Layanan Anda hanya akan mulai jika multi-user.target telah tercapai (saya tidak tahu apa yang terjadi jika Anda mencoba menambahkannya ke target itu?), Dan systemd akan mencoba memulai tampilan-manager.service sebelum layanan Anda . Jika display-manager.service gagal karena alasan apa pun, layanan Anda akan tetap dimulai (jadi jika Anda benar-benar membutuhkan display-manager, gunakan Requires=untuk itu). Namun, jika multi-user.target tidak tercapai, layanan Anda tidak akan diluncurkan.

Apa layanan Anda Apakah ini sistem kios? Secara intuitif saya kira Anda ingin menambahkan layanan Anda ke multi-user.target (jadi diluncurkan saat startup), dan memilikinya sangat bergantung pada tampilan-manager.service via Requires=display-manager.service. Tapi itu hanya tebakan liar sekarang.

ArchimedesMP
sumber
1

Penerapan server kami menggunakan LDAP yang berisi semua ID pengguna dan peta automount. Direktori home pengguna dipasang di NFS, dan pengguna biasanya membuat cronjobs @reboot dengan kode yang dapat dieksekusi di direktori home mereka. Kami juga menggunakan sssd untuk cache. Tidak perlu dikatakan, kami memiliki kepercayaan yang tinggi untuk dapat memberikan urutan boot deterministik agar konfigurasi ini berfungsi. Kami telah mengembangkan konfigurasi systemd yang sangat ringkas, dan telah menemukan nuansa yang tidak jelas antara opsi bagian "ingin" dan "membutuhkan".

Jika Anda mengalami kegagalan layanan selama boot, dan ada layanan lain yang bergantung pada "mengharuskan" pada layanan itu dengan "restart = always" yang ditetapkan sebagai opsi layanan, layanan yang bergantung itu tidak akan memulai kembali. Namun, jika Anda memiliki "keinginan" sebagai opsi, layanan dependen akan dimulai kembali, seperti yang diharapkan.

billq
sumber