То, что упомянул Мунир, как раз то, как вы это делаете. По сути, вы создаете файл 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
(необходимо только если вы изменяете файл unit и не пропустили предыдущую версию). А теперь включите все службы, которыми вы хотите управлять, выполнив systemctl enable test@{1..30}.service
.
(Если вы ранее включили службу, когда она имела WantedBy=multi-user.target
, сначала отключите ее, чтобы убрать зависимость)
Теперь вы можете выполнить systemctl start test.target
и systemctl stop test.target
, и это запустит/остановит все 30 процессов.
И снова, вы можете включить его при загрузке, как и любой другой юнит-файл: systemctl enable test.target
.