Я новичок в python и хотел познакомиться, поэтому я создал скрипт на python, который использует Popen из подпроцесса для выполнения скрипта bash.Сценарий bash устанавливает среду и запускает программу на C ++ для запуска в фоновом режиме.
Предполагаемое использование - запуск сценария python в качестве службы, отслеживающей процесс C ++ и, если процесс C ++завершите работу, снова запустите сценарий запуска bash.
Все работает так, как задумано, если я запускаю сценарий python из командной строки (./proc_watchdog.py
), а затем ctr + c, процесс C ++ продолжит работать.
Если я затем выполню скрипт python, используя systemd, systemd start pythonscript.service
, а затем остановлю его systemd stop pythonscript.service
, программа C ++ завершит работу.
Файл .service:
[Unit]
Description=RustDedicated watchdog service
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=scriptuser
ExecStart=/path/to/C++_Prog_Dir/proc_watchdog.py
[Install]
WantedBy=multi-user.target
Скрипт python:
#!/usr/bin/python3
import subprocess as sp
import os
import psutil
import time
backgroundProc = "Procname"
def processWatchdog():
waitCount = 0;
while True:
procList = []
for proc in psutil.process_iter():
procList.append(proc.as_dict(attrs=['name']))
found = 0
for pname in procList:
if backgroundProc == pname['name']:
print("Process running")
found = 1
if found == 0:
print("Process not found...")
waitCount += 1
if waitCount == 3:
p = sp.Popen(["/path/to/C++_Prog_Dir/start.sh"])
print("Restarting")
p.wait()
waitCount = 0
print("Restarted")
time.sleep(2)
if __name__ == '__main__':
processWatchdog()
Пример скрипта Bash:
#!/bin/bash
./c++_process &>> /dev/null &
exit 0
Может кто-нибудь помочь мне понять, почему скрипт python будет вести себя по-разному для каждого из способов его выполнения?