Những gì Munir đề cập chính xác là cách bạn làm điều này. Về cơ bản, bạn tạo một service
tập tin và bắt đầu nó 30 lần. Bây giờ điều đó có vẻ hơi khó chịu, nhưng nó có những lợi thế, chẳng hạn như có thể tắt một trong số chúng nếu nó hoạt động sai, và không phải tắt tất cả chúng. Ngoài ra còn có một số điều bạn có thể làm để quản lý dễ dàng hơn.
Đầu tiên, tập tin đơn vị. Tạo một tập tin, chẳng hạn như /etc/systemd/system/test@.service
. Các bit quan trọng là @
biểu tượng.
Nội dung của nó có thể trông giống như:
[Service]
ExecStart=/bin/sleep 600 %I
[Install]
WantedBy=multi-user.target
Sau đó bắt đầu nó với systemctl start test@1.service
, systemctl start test@2.service
.
Các quy trình được khởi chạy sẽ trông như sau:
root 17222 19 0 0.0 0.0 Ss 00:05 /bin/sleep 600 1
root 17233 19 0 0.0 0.0 Ss 00:02 /bin/sleep 600 2
Lưu ý rằng %I
đã thay thế bằng bất cứ thứ gì bạn đặt sau @
khi bạn bắt đầu nó.
Bạn có thể bắt đầu tất cả 30 với một ít shell-fu:
systemctl start test@{1..30}.service
Bạn cũng có thể kích hoạt chúng khi khởi động như mọi dịch vụ bình thường : systemctl enable test@1.service
.
Bây giờ, ý của tôi là những điều bạn có thể làm để giúp quản lý dễ dàng hơn: Có thể bạn không muốn phải sử dụng test@{1..30}.service
để quản lý tất cả. Đó là một chút khó khăn. Thay vào đó, bạn có thể tạo một mục tiêu mới cho dịch vụ của mình.
Tạo /etc/systemd/system/test.target
bằng:
[Install]
WantedBy=multi-user.target
Sau đó điều chỉnh /etc/systemd/system/test@.service
sao cho giống như:
[Unit]
StopWhenUnneeded=true
[Service]
ExecStart=/bin/sleep 600 %I
[Install]
WantedBy=test.target
Tải lại systemd bằng systemctl daemon-reload
(chỉ cần thiết nếu bạn đang sửa đổi tệp đơn vị và không bỏ qua phiên bản trước đó của nó). Và bây giờ kích hoạt tất cả các dịch vụ bạn muốn được quản lý bằng cách thực hiện systemctl enable test@{1..30}.service
.
(Nếu trước đây bạn đã kích hoạt dịch vụ trong khi có WantedBy=multi-user.target
, hãy tắt dịch vụ trước để xóa phần phụ thuộc)
Bây giờ bạn có thể làm systemctl start test.target
và systemctl stop test.target
, nó sẽ bắt đầu / dừng tất cả 30 quy trình.
Và một lần nữa, bạn có thể kích hoạt khi khởi động như bất kỳ tệp đơn vị nào khác : systemctl enable test.target
.