Мунир упомянул, как именно вы это делаете. По сути, вы создаете serviceфайл и запускаете его 30 раз. Теперь это может показаться немного странным, но у него есть свои преимущества, такие как возможность отключить один из них, если он плохо себя ведет, и не нужно закрывать все из них. Есть также некоторые вещи, которые вы можете сделать, чтобы упростить управление.
Сначала файл модуля. Создайте файл, например /etc/systemd/system/test@.service. Важным битом является @символ.
Это содержимое может выглядеть так:
[Service]
ExecStart=/bin/sleep 600 %I
[Install]
WantedBy=multi-user.target
Затем запустите его systemctl start test@1.service, systemctl start test@2.service.
Запущенные процессы будут выглядеть так:
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
Обратите внимание на то, %Iчто вы заменили все, что вы положили после того, @как вы его начали.
Вы можете начать все 30 с небольшим shell-fu:
systemctl start test@{1..30}.service
Вы также можете включить их при загрузке , как и любой нормальный сервис: systemctl enable test@1.service.
Теперь, что я имел в виду под вещами, которые вы можете сделать, чтобы упростить управление: возможно, вам не нужно использовать их test@{1..30}.serviceдля управления ими. Это немного громоздко. Вместо этого вы можете создать новую цель для вашего сервиса.
Создать /etc/systemd/system/test.targetс помощью:
[Install]
WantedBy=multi-user.target
Затем настройте /etc/systemd/system/test@.serviceтак, чтобы это выглядело так:
[Unit]
StopWhenUnneeded=true
[Service]
ExecStart=/bin/sleep 600 %I
[Install]
WantedBy=test.target
Перезагрузите systemd с помощью systemctl daemon-reload(необходимо, только если вы изменяете файл модуля и не пропустили более раннюю его версию). А теперь включите все сервисы, которыми вы хотите управлять systemctl enable test@{1..30}.service.
(Если вы ранее включили службу, пока она была WantedBy=multi-user.target, сначала отключите ее, чтобы очистить зависимость)
Теперь вы можете сделать systemctl start test.targetи systemctl stop test.target, и он запустит / остановит все 30 процессов.
И опять же , вы можете включить при загрузке , как и любой другой файл модуля: systemctl enable test.target.