Munir wspomniał dokładnie, jak to robisz. Zasadniczo tworzysz serviceplik 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 %Izostał 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}.servicedo 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.targetpomocą:
[Install]
WantedBy=multi-user.target
Następnie dostosuj /etc/systemd/system/test@.servicetak, 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.targeti 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.