Munir wspomniał dokładnie, jak to robisz. Zasadniczo tworzysz service
plik i uruchamiasz go 30 razy. Teraz może to wydawać się trochę niewygodne, ale ma zalety, takie jak możliwość zamknięcia jednego z nich, jeśli jest źle funkcjonujący, i nie trzeba wyłączać wszystkich. Istnieje również kilka rzeczy, które możesz zrobić, aby ułatwić zarządzanie.
Najpierw plik jednostki. Utwórz plik, taki jak /etc/systemd/system/test@.service
. Ważnym elementem jest @
symbol.
Jego zawartość może wyglądać następująco:
[Service]
ExecStart=/bin/sleep 600 %I
[Install]
WantedBy=multi-user.target
Następnie należy uruchomić go systemctl start test@1.service
, systemctl start test@2.service
.
Uruchomione procesy będą wyglądały następująco:
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
Zauważ, że %I
został zastąpiony czymkolwiek, co umieścisz po jego @
uruchomieniu.
Możesz zacząć wszystkie 30 od małego shell-fu:
systemctl start test@{1..30}.service
Można także włączyć je w bagażniku jak każdy normalny usługi: systemctl enable test@1.service
.
Co mam na myśli, mówiąc o rzeczach, które możesz zrobić, aby ułatwić zarządzanie: Być może nie chcesz używać wszystkich test@{1..30}.service
do zarządzania nimi. To jest trochę nieporęczne. Zamiast tego możesz utworzyć nowy cel dla swojej usługi.
Utwórz za /etc/systemd/system/test.target
pomocą:
[Install]
WantedBy=multi-user.target
Następnie dostosuj /etc/systemd/system/test@.service
tak, aby wyglądało tak:
[Unit]
StopWhenUnneeded=true
[Service]
ExecStart=/bin/sleep 600 %I
[Install]
WantedBy=test.target
Załaduj ponownie systemd za pomocą systemctl daemon-reload
(konieczne tylko, jeśli modyfikujesz plik jednostki i nie pomijałeś jego wcześniejszej wersji). A teraz włącz wszystkie usługi, którymi chcesz zarządzać systemctl enable test@{1..30}.service
.
(Jeśli wcześniej włączyłeś tę usługę WantedBy=multi-user.target
, wyłącz ją najpierw, aby usunąć zależność)
Możesz teraz zrobić systemctl start test.target
i systemctl stop test.target
, a to uruchomi / zatrzyma wszystkie 30 procesów.
I znów, można włączyć przy starcie jak każdy inny plik jednostki: systemctl enable test.target
.