fix process restart event
This commit is contained in:
@@ -59,17 +59,31 @@ def control_service(action: str):
|
|||||||
return {"status": "error", "message": f"Failed to start OpenVPN: {str(e)}"}
|
return {"status": "error", "message": f"Failed to start OpenVPN: {str(e)}"}
|
||||||
|
|
||||||
def stop_vpn_direct():
|
def stop_vpn_direct():
|
||||||
stopped = False
|
procs_to_stop = []
|
||||||
for proc in psutil.process_iter(['name']):
|
for proc in psutil.process_iter(['name']):
|
||||||
if proc.info['name'] == 'openvpn':
|
if proc.info['name'] == 'openvpn':
|
||||||
proc.terminate()
|
try:
|
||||||
stopped = True
|
proc.terminate()
|
||||||
|
procs_to_stop.append(proc)
|
||||||
|
except (psutil.NoSuchProcess, psutil.AccessDenied):
|
||||||
|
pass
|
||||||
|
|
||||||
|
if procs_to_stop:
|
||||||
|
# Wait for processes to actually exit
|
||||||
|
logger.info(f"[PROCESS] Waiting for {len(procs_to_stop)} OpenVPN process(es) to terminate...")
|
||||||
|
gone, alive = psutil.wait_procs(procs_to_stop, timeout=5)
|
||||||
|
for p in alive:
|
||||||
|
try:
|
||||||
|
logger.warning(f"[PROCESS] Process {p.pid} did not terminate, killing...")
|
||||||
|
p.kill()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
if os.path.exists(PID_FILE):
|
if os.path.exists(PID_FILE):
|
||||||
try: os.remove(PID_FILE)
|
try: os.remove(PID_FILE)
|
||||||
except: pass
|
except: pass
|
||||||
|
|
||||||
if stopped:
|
if procs_to_stop:
|
||||||
return {"status": "success", "message": "OpenVPN stopped successfully"}
|
return {"status": "success", "message": "OpenVPN stopped successfully"}
|
||||||
else:
|
else:
|
||||||
return {"status": "success", "message": "OpenVPN was not running"}
|
return {"status": "success", "message": "OpenVPN was not running"}
|
||||||
@@ -78,7 +92,6 @@ def control_service(action: str):
|
|||||||
elif action == "stop": return stop_vpn_direct()
|
elif action == "stop": return stop_vpn_direct()
|
||||||
elif action == "restart":
|
elif action == "restart":
|
||||||
stop_vpn_direct()
|
stop_vpn_direct()
|
||||||
time.sleep(1)
|
|
||||||
return start_vpn_direct()
|
return start_vpn_direct()
|
||||||
|
|
||||||
# On Host OS: Use system service manager
|
# On Host OS: Use system service manager
|
||||||
|
|||||||
Reference in New Issue
Block a user