У меня есть этот код Python, который мне нужно запустить, используя systemd
, и следить за его зависанием.Проблема в том, что когда я запускаю скрипт python непосредственно из systemd, он работает нормально.Однако, когда скрипт python запускается из другого сценария оболочки, который запускается из моей службы systemd, он говорит:
sdping_py.service: Got notification message from PID 6828, but reception only permitted for main PID 6768
Проблема заключается в том, что сценарий python выполняется как дочерний процесс сценария оболочки и службы systemd.ожидание уведомлений от сценария оболочки, который является основным процессом для службы.Как я могу обойти это?Мое приложение строго должно быть запущено из сценария оболочки.
Вот код Python, который я пробовал,
import sdnotify, time
n = sdnotify.SystemdNotifier()
print("Gonna start")
time.sleep(2)
print("Started!")
n.notify("READY=1")
i=0
while True:
print(i)
time.sleep(1)
n.notify("WATCHDOG=1")
i+=1
Это мой служебный файл
[Unit]
Description=Test watchdog Demo process
DefaultDependencies=false
Requires=basic.target
[Service]
Type=notify
WatchdogSec=2
ExecStart=/home/teshanl/sdping/scripts/sdping_py.sh
#ExecStart=/usr/bin/python /home/teshanl/sdping/src/sdping_pub.py
StartLimitInterval=5min
StartLimitBurst=5
#StartLimitAction=reboot
Restart=always
И этоэто файл оболочки
#!/bin/bash
/usr/bin/python /home/teshanl/sdping/src/sdping_pub.py
РЕДАКТИРОВАТЬ:
Благодаря @georgexsh, добавление exec
в команду оболочки частично решило мою проблему.Мой новый вопрос: как мне сделать то же самое с командой roslaunch
?Узел ROS должен отправлять уведомление пульса службе systemd
.roslaunch
запускает узлы с отдельными PID, очевидно,