mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 07:27:15 +08:00
fix:优雅停止超时处理
This commit is contained in:
+26
-3
@@ -1,5 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
import signal
|
import signal
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
|
||||||
@@ -41,8 +43,8 @@ class SystemHelper:
|
|||||||
判断是否可以内部重启
|
判断是否可以内部重启
|
||||||
"""
|
"""
|
||||||
return (
|
return (
|
||||||
Path("/var/run/docker.sock").exists()
|
Path("/var/run/docker.sock").exists()
|
||||||
or settings.DOCKER_CLIENT_API != "tcp://127.0.0.1:38379"
|
or settings.DOCKER_CLIENT_API != "tcp://127.0.0.1:38379"
|
||||||
)
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -64,7 +66,7 @@ class SystemHelper:
|
|||||||
if index_resolv_conf != -1:
|
if index_resolv_conf != -1:
|
||||||
index_second_slash = data.rfind(" ", 0, index_resolv_conf)
|
index_second_slash = data.rfind(" ", 0, index_resolv_conf)
|
||||||
index_first_slash = (
|
index_first_slash = (
|
||||||
data.rfind("/", 0, index_second_slash) + 1
|
data.rfind("/", 0, index_second_slash) + 1
|
||||||
)
|
)
|
||||||
container_id = data[index_first_slash:index_second_slash]
|
container_id = data[index_first_slash:index_second_slash]
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -113,6 +115,8 @@ class SystemHelper:
|
|||||||
if has_restart_policy:
|
if has_restart_policy:
|
||||||
# 有重启策略,使用优雅退出方式
|
# 有重启策略,使用优雅退出方式
|
||||||
logger.info("检测到容器配置了自动重启策略,使用优雅重启方式...")
|
logger.info("检测到容器配置了自动重启策略,使用优雅重启方式...")
|
||||||
|
# 启动优雅退出超时监控
|
||||||
|
SystemHelper._start_graceful_shutdown_monitor()
|
||||||
# 发送SIGTERM信号给当前进程,触发优雅停止
|
# 发送SIGTERM信号给当前进程,触发优雅停止
|
||||||
os.kill(os.getpid(), signal.SIGTERM)
|
os.kill(os.getpid(), signal.SIGTERM)
|
||||||
return True, ""
|
return True, ""
|
||||||
@@ -126,6 +130,25 @@ class SystemHelper:
|
|||||||
logger.warning("降级为Docker API重启...")
|
logger.warning("降级为Docker API重启...")
|
||||||
return SystemHelper._docker_api_restart()
|
return SystemHelper._docker_api_restart()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _start_graceful_shutdown_monitor():
|
||||||
|
"""
|
||||||
|
启动优雅退出超时监控
|
||||||
|
如果30秒内进程没有退出,则使用Docker API强制重启
|
||||||
|
"""
|
||||||
|
|
||||||
|
def monitor_thread():
|
||||||
|
time.sleep(30) # 等待30秒
|
||||||
|
logger.warning("优雅退出超时30秒,使用Docker API强制重启...")
|
||||||
|
try:
|
||||||
|
SystemHelper._docker_api_restart()
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"强制重启失败: {str(e)}")
|
||||||
|
|
||||||
|
# 在后台线程中启动监控
|
||||||
|
thread = threading.Thread(target=monitor_thread, daemon=True)
|
||||||
|
thread.start()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _docker_api_restart() -> Tuple[bool, str]:
|
def _docker_api_restart() -> Tuple[bool, str]:
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user