GNU/Linux >> Belajar Linux >  >> Linux

Mengapa Kebanyakan Contoh Systemd Berisi Wantedby=multi-user.target?

Saya telah membaca apa itu multi-user.target dan dokumentasi systemd, yang menyatakan bahwa multi-user.target adalah target khusus. Selanjutnya, banyak contoh systemd berisi baris itu.

  1. Mengapa begitu banyak layanan contoh berisi baris itu?
  2. Apa yang akan terjadi jika mereka tidak mengandung WantedBy=multi-user.target?
  3. Bisakah Anda memberi saya contoh kapan sebenarnya disarankan untuk tidak menyertakan baris itu dalam definisi file layanan?
  4. Sepanjang garis yang sama, kapan ide yang baik untuk mempertahankan garis itu?

Jawaban yang Diterima:

1.) multi-user.target pada dasarnya setara dengan runlevel 3 SysVinit klasik yang systemd memiliki. Ketika systemd sistem boot, systemd mencoba membuat status sistem cocok dengan status yang ditentukan oleh default.target – yang biasanya merupakan alias untuk graphical.target atau multi-user.target .

multi-user.target biasanya mendefinisikan status sistem di mana semua layanan jaringan dimulai dan sistem akan menerima login, tetapi GUI lokal tidak dimulai. Ini adalah status sistem default khas untuk sistem server, yang mungkin berupa sistem tanpa kepala yang dipasang di rak di ruang server jauh.

graphical.target adalah kemungkinan alias lain untuk default.target . Biasanya ini didefinisikan sebagai superset dari multi-user.target :itu mencakup semua multi-user.target tidak, ditambah aktivasi login GUI lokal. Mirip seperti runlevel 5 di SysVinit klasik.

Baris WantedBy=multi-user.target dalam suatu layanan pada dasarnya sama dengan menetapkan "layanan ini harus dimulai di runlevel 3, 4 dan 5" di sistem SysVinit:ia memberi tahu systemd bahwa layanan ini harus dimulai sebagai bagian dari pengaktifan sistem normal, terlepas dari apakah GUI lokal aktif atau tidak.

Namun, WantedBy terpisah dari status diaktifkan/dinonaktifkan:jadi dalam arti lain, ini semacam "preset":menentukan dalam kondisi apa mulai otomatis dapat terjadi, tetapi hanya ketika layanan diaktifkan di tempat pertama.

2.) jika Anda menghilangkan WantedBy=multi-user.target baris dan tidak ada layanan lain yang diaktifkan yang menyertakan Requires=your.service atau Wants=your.service dalam definisi layanannya, layanan Anda tidak akan dimulai secara otomatis.

systemd bekerja pada dependensi, dan pada saat boot, jika tidak ada yang Requires atau Wants layanan Anda, itu tidak akan dimulai meskipun layanan diaktifkan.

Tentu, Anda dapat mengedit default.target untuk menambah atau menghapus Requires atau Wants baris untuk layanan apa pun yang Anda ingin mulai saat boot – tetapi agar Anda dapat memasukkan file layanan baru ke dalam sistem dan membuatnya bekerja secara default (yang membuat segalanya menjadi sangat mudah bagi manajer paket perangkat lunak), systemd memiliki WantedBy dan RequiredBy kata kunci yang dapat digunakan untuk menyisipkan Wants dan Requires -type dependensi (masing-masing) dari "ujung yang lain".

Terkait:Ubuntu – "aktivasi soket" systemd vs xinetd?

3.) Anda harus menghilangkan baris tersebut jika tidak ingin layanan dimulai secara otomatis saat boot, atau layanan ini adalah bagian dari rantai dependensi yang telah Anda definisikan secara eksplisit.

Misalnya, Anda mungkin memfaktorkan ulang aplikasi server A dan untuk beberapa alasan atau lainnya memutuskan untuk membagi beberapa fungsionalitas opsional menjadi layanan B terpisah, untuk memungkinkan pengguna memilih untuk tidak menginstalnya jika tidak diperlukan. Anda kemudian dapat membuat layanan B menjadi service-B.rpm yang terpisah , dan tentukan B.service dengan WantedBy=A.service untuk membuat systemd memulai layanan B secara otomatis setiap kali layanan A dimulai – tetapi hanya ketika service-B.rpm benar-benar terinstal.

Perhatikan bahwa Wants atau WantedBy hanya mengatakan bahwa sistem harus memulai satu layanan setiap kali layanan atau target lain juga dimulai, tetapi tidak menentukan sama sekali tentang urutan startup/shutdown. Jika Anda membutuhkan layanan B sudah berjalan saat layanan A dimulai, Anda perlu menambahkan Before=A.service di B.service file untuk secara eksplisit menentukan ketergantungan pesanan awal.

4.) Kapan pun Anda melakukannya ingin layanan memiliki kemampuan untuk dimulai secara otomatis saat boot, dan tidak ada dependensi lain yang telah ditentukan.


Linux
  1. Mengapa Systemd Menghentikan Layanan Segera Setelah Dimulai?

  2. Contoh Perintah layanan di Linux

  3. Contoh Perintah chkconfig di Linux

  1. Contoh Perintah systemctl di Linux

  2. systemd - Memberikan banyak argumen pada layanan saya

  3. Jadikan layanan pengguna systemd tergantung pada target sistem

  1. Bagaimana cara menjalankan skrip dengan systemd tepat sebelum dimatikan?

  2. aktivasi soket systemd vs xinetd

  3. Ketergantungan sistem dan urutan boot