Рейтинг:1

systemd убивает мой сеанс ngrok, начатый с python

флаг in

У меня есть скрипт, который я написал, который прослушивает mqtt. Когда определенный код поступает на сервер mqtt, сеанс ngrok запускается следующим образом:

subprocess.Popen(['/tmp/ngrok','http','8080'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)

scrupt запускается в virtualenv и имеет сценарий оболочки для активации виртуального env и его запуска:

#!/бин/баш
. ./venv/bin/активировать
Python mqtt_listener.py

При запуске этого скрипта в моей оболочке с & в конце сеанс ngrok открывается и остается открытым, пока я не убью его сам. Однако при работе в systemd с использованием следующего системного файла (файл пользователя) /home/myuser/.config/systemd/user/mqtt_listener.service

[Ед. изм]
Description=mqtt запустить службу
После = default.target

[Оказание услуг]
Тип=exec
ExecStart=/home/myuser/mqtt_listener/run_mqtt_service.sh
KillMode=процесс

[Установить]
WantedBy=default.target

как только служба получает команду mqtt, я вижу журналы журнала, служба получила мое сообщение и разветвила процесс ngrok, но затем я вижу

служба была «успешно деактивирована», а затем перезапущена. странно то, что это всегда происходит, когда я не вошел в систему, используя ssh на сервере, если я вошел в систему, процесс не умрет. Любая идея, что я делаю неправильно? type=exec связан с тем, что другие просто не подходят. Я не могу понять, почему systemd считает мою службу python выполненной и, таким образом, убивает ее после внучатого форка (первый форк - это скрипт запуска, который, по-видимому, могу избавиться).

Рейтинг:1
флаг cz

По умолчанию пользовательские службы не запускаются, если пользователь не вошел в систему.

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

sudo loginctl enable-linger <имя пользователя>

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

codeScriber avatar
флаг in
действительно вы правы! Впервые я использовал службу пользователя systemd и использовал ее из соображений безопасности, без сомнения, это решило проблему, спасибо!

Ответить или комментировать

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