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.
- Mengapa begitu banyak layanan contoh berisi baris itu?
- Apa yang akan terjadi jika mereka tidak mengandung WantedBy=multi-user.target?
- Bisakah Anda memberi saya contoh kapan sebenarnya disarankan untuk tidak menyertakan baris itu dalam definisi file layanan?
- 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".
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.