я нашел 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
команда? Какой из двух единиц с одинаковыми названиями должен остановиться? Тот, который ты бежал первым? Последний? Обе?