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?

Magnus
sumber

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

Tom Hunt
sumber
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.

Benny Jobigan
sumber
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