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)}"}
|
||||
|
||||
def stop_vpn_direct():
|
||||
stopped = False
|
||||
procs_to_stop = []
|
||||
for proc in psutil.process_iter(['name']):
|
||||
if proc.info['name'] == 'openvpn':
|
||||
proc.terminate()
|
||||
stopped = True
|
||||
try:
|
||||
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):
|
||||
try: os.remove(PID_FILE)
|
||||
except: pass
|
||||
|
||||
if stopped:
|
||||
if procs_to_stop:
|
||||
return {"status": "success", "message": "OpenVPN stopped successfully"}
|
||||
else:
|
||||
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 == "restart":
|
||||
stop_vpn_direct()
|
||||
time.sleep(1)
|
||||
return start_vpn_direct()
|
||||
|
||||
# On Host OS: Use system service manager
|
||||
|
||||
Reference in New Issue
Block a user