Мунир упомянул, как именно вы это делаете. По сути, вы создаете 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
.