Nhóm dịch vụ systemd


10

Tôi đã viết khoảng nửa tá .servicetệp cho các phần khác nhau tạo nên hệ thống tôi đang làm việc. Thật hữu ích khi có thể khởi động toàn bộ hệ thống từng phần nhưng tôi cũng muốn có một đơn vị duy nhất khởi động toàn bộ hệ thống trong một cuộc gọi đến systemctl.

Cách tốt nhất để làm điều này là gì?

Câu trả lời:


10

Bạn muốn có một đơn vị loại mục tiêu , với tất cả các đơn vị dịch vụ được liệt kê là Wants=phụ thuộc. Sau đó, bạn bắt đầu sử dụng nó systemctl start unitname.target. (Đảm bảo không sử dụng systemctl isolateở đây; điều đó sẽ tắt tất cả mọi thứ trừ những gì trong cây phụ thuộc dịch vụ của bạn, có lẽ bạn không muốn.)


Ngoài ra, bạn có thể sử dụng WantedBykhóa trong [Install]phần và lưu ý mục tiêu đã tồn tại. Ví dụ: nếu bạn muốn dịch vụ của mình luôn khởi động trước khi người dùng khác có thể đăng nhập, hãy sử dụng multi-user.target.
saiarcot895

Có, loại mục tiêu với việc Wants=liệt kê tất cả các dịch vụ có vẻ đủ hiệu quả để bắt đầu , tuy nhiên tôi dường như không thể tìm thấy bất kỳ cách nào để dừngkhởi động lại công việc bằng cách sử dụng loại mục tiêu. Có một loại cho phép điều đó?
Magnus

Magnus, bạn đã bao giờ tìm thấy một giải pháp tốt cho việc này chưa?
Sam Hendley

2
Sam, Magnus: Có vẻ như việc dừng các dịch vụ mong muốn từ một tệp .targetcó thể được thực hiện bằng cách sử dụng StopWhenUnneeded=yestrong mỗi .servicetệp. superuser.com/questions/470153/
trộm

1
Trong trường hợp cụ thể của tôi, tôi có thể sử dụng các công cụ systemd xử lý toàn cầu :) Vì vậy, để bắt đầu tôi sử dụng .targetvà để dừng tôi sử dụng systemctl stop foo.\*(vì tất cả các dịch vụ liên quan đều có tệp dịch vụ bắt đầu wit foo.).
Magnus

2

Bạn đã thử sử dụng PartOftrên các đơn vị con của nhóm mục tiêu ngoài Wantsmục tiêu chưa? Vd: PartOf=foo.targettrong foo-sub1.serviceWants=foo-sub1.service foo-sub2.servicetrong foo.target. Tôi chỉ thử điều này và có thể bắt đầu và dừng tất cả các đơn vị phụ của mình chỉ bằng cách bắt đầu và dừng mục tiêu.

PartOf =

Định cấu hình các phụ thuộc tương tự như Yêu cầu =, nhưng giới hạn ở việc dừng và khởi động lại các đơn vị. Khi systemd dừng hoặc khởi động lại các đơn vị được liệt kê ở đây, hành động được truyền đến đơn vị này. Lưu ý rằng đây là phụ thuộc một chiều - các thay đổi đối với đơn vị này không ảnh hưởng đến các đơn vị được liệt kê.

Khi PartOf = b.service được sử dụng trên a.service, phần phụ thuộc này sẽ hiển thị dưới dạng ConsistsOf = a.service trong danh sách thuộc tính của b.service. ConsistsOf = phụ thuộc không thể được chỉ định trực tiếp.


Chào mừng bạn đến với U & L! Nếu bài đăng của bạn không cung cấp câu trả lời cho câu hỏi thì nó sẽ được đăng trong phần Nhận xét bên dưới câu hỏi.
Yurij Goncharuk

Điều này cung cấp cho nửa còn lại câu trả lời của Tom Hunt - khả năng ngăn chặn toàn bộ nhóm dịch vụ.
Benny Jobigan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.