Как сравнить две даты без использования Stat?

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

4
02.07.2015, 17:20
0 ответов

Теги

Похожие вопросы