Назад | Перейти на главную страницу

Сделать `systemd-run` корректно завершиться неудачей, если имя юнита уже существует?

я нашел systemd-run что позволяет запускать процессы в фоновом режиме один раз («временные службы»). Я всегда указываю название сервисного подразделения с помощью --unit $NAME. Но если я уже запустил systemd-run команда и мой процесс запущен, тогда systemd-run завершится ошибкой с ненулевым кодом выхода. Есть ли способ сказать systemd-run быть более идемпотентным и не потерпеть неудачу в этом случае?

В настоящее время занимаюсь:

 systemctl is-active $NAME || systemd-run --unit $NAME $COMMAND

Есть ли способ лучше?

Это на Ubuntu 18.04 с текущей системой для этого (версия 237?)

Я не думаю, что есть способ не потерпеть неудачу.

Проблема здесь в том, что имена модулей systemd должны быть уникальными. В противном случае управление юнитами может стать неоднозначным. По этой причине systemd воспринимает ошибку, если вы пытаетесь дублировать имена модулей, и я не думаю, что есть способ заставить его думать иначе.

Если бы вы могли убедить systemd-run чтобы запустить вторую службу с тем же именем, что произойдет, если вы выдадите systemctl stop команда? Какой из двух единиц с одинаковыми названиями должен остановиться? Тот, который ты бежал первым? Последний? Обе?