Pengelompokan layanan systemd


10

Saya telah menulis sekitar setengah lusin .servicefile untuk bagian-bagian berbeda yang membentuk sistem yang sedang saya kerjakan. Ini berguna untuk dapat memulai sedikit demi sedikit seluruh sistem tetapi saya juga ingin memiliki satu unit yang memulai seluruh sistem dalam satu panggilan systemctl.

Apa cara terbaik untuk melakukan ini?

Jawaban:


10

Anda menginginkan unit tipe target , dengan semua unit layanan terdaftar sebagai Wants=dependensi. Kemudian Anda mulai menggunakannya systemctl start unitname.target. (Pastikan untuk tidak menggunakan di systemctl isolatesini; itu akan mematikan segalanya kecuali apa yang ada di pohon ketergantungan layanan Anda, yang mungkin Anda tidak inginkan.)


Atau, Anda bisa menggunakan WantedBykunci di [Install]bagian itu dan mencatat target yang sudah ada. Misalnya, jika Anda ingin layanan Anda selalu mulai sebelum pengguna lain dapat masuk, gunakan multi-user.target.
saiarcot895

Ya, tipe target dengan Wants=daftar semua layanan tampaknya cukup untuk memulai , namun saya tidak bisa menemukan cara untuk menghentikan dan memulai kembali pekerjaan menggunakan tipe target. Apakah ada tipe yang memungkinkan?
Magnus

Magnus, apakah Anda pernah menemukan solusi yang bagus untuk ini?
Sam Hendley

2
Sam, Magnus: Sepertinya menghentikan layanan yang diinginkan dari .targetdapat dilakukan menggunakan StopWhenUnneeded=yesmasing-masing .servicefile. superuser.com/questions/470153/…
jonnor

1
Dalam kasus khusus saya, saya dapat menggunakan alat-alat systemd yang menangani globbing :) Jadi, untuk memulai saya menggunakan .targetdan untuk menghentikan saya gunakan systemctl stop foo.\*(karena semua layanan yang terlibat memiliki file layanan mulai dengan kecerdasan foo.).
Magnus

2

Sudahkah Anda mencoba menggunakan PartOfpada sub-unit dari kelompok target selain Wantsdi dalam target? Mis: PartOf=foo.targetmasuk foo-sub1.servicedan Wants=foo-sub1.service foo-sub2.servicemasuk foo.target. Saya baru saja mencoba ini dan dapat memulai dan menghentikan semua sub-unit saya hanya dengan memulai dan menghentikan target.

Bagian =

Mengkonfigurasi dependensi mirip dengan Membutuhkan =, tetapi terbatas pada menghentikan dan memulai kembali unit. Ketika systemd berhenti atau me-restart unit yang terdaftar di sini, tindakan disebarkan ke unit ini. Perhatikan bahwa ini adalah ketergantungan satu arah - perubahan pada unit ini tidak mempengaruhi unit yang terdaftar.

Ketika PartOf = b.service digunakan pada layanan a.service, dependensi ini akan ditampilkan sebagai ConsistsOf = a.service dalam daftar properti b.service. ConsistsOf = ketergantungan tidak dapat ditentukan secara langsung.


Selamat datang di U&L! Jika posting Anda tidak memberikan jawaban untuk pertanyaan, maka itu harus diposting di bagian Komentar di bawah pertanyaan.
Yurij Goncharuk

Ini memberikan setengah dari jawaban yang diberikan oleh Tom Hunt - kemampuan untuk menghentikan seluruh kelompok layanan.
Benny Jobigan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.