feat 内建重启
This commit is contained in:
@@ -18,6 +18,7 @@ from app.helper.message import MessageHelper
|
||||
from app.helper.progress import ProgressHelper
|
||||
from app.schemas.types import SystemConfigKey
|
||||
from app.utils.http import RequestUtils
|
||||
from app.utils.system import SystemUtils
|
||||
from version import APP_VERSION
|
||||
|
||||
router = APIRouter()
|
||||
@@ -198,3 +199,14 @@ def ruletest(title: str,
|
||||
return schemas.Response(success=True, data={
|
||||
"priority": 100 - result[0].pri_order + 1
|
||||
})
|
||||
|
||||
|
||||
@router.get("/restart", summary="重启系统", response_model=schemas.Response)
|
||||
def restart_system(_: schemas.TokenPayload = Depends(verify_token)):
|
||||
"""
|
||||
重启系统
|
||||
"""
|
||||
if not SystemUtils.can_restart():
|
||||
return schemas.Response(success=False, message="当前运行环境不支持重启操作!")
|
||||
SystemUtils.restart_docker()
|
||||
return schemas.Response(success=True)
|
||||
|
@@ -5,6 +5,8 @@ import re
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
from typing import List, Union, Tuple
|
||||
|
||||
import docker
|
||||
import psutil
|
||||
from app import schemas
|
||||
|
||||
@@ -292,3 +294,26 @@ class SystemUtils:
|
||||
获取内存使用量和使用率
|
||||
"""
|
||||
return [psutil.virtual_memory().used, int(psutil.virtual_memory().percent)]
|
||||
|
||||
@staticmethod
|
||||
def can_restart() -> bool:
|
||||
"""
|
||||
判断是否可以内部重启
|
||||
"""
|
||||
if not SystemUtils.is_docker():
|
||||
return False
|
||||
return Path("/var/run/docker.sock").exists()
|
||||
|
||||
@staticmethod
|
||||
def restart_docker():
|
||||
"""
|
||||
执行Docker重启操作
|
||||
"""
|
||||
# 创建 Docker 客户端
|
||||
client = docker.from_env()
|
||||
# 获取当前容器的 ID
|
||||
container_id = open("/proc/self/cgroup", "r").read().split("/")[-1]
|
||||
if not container_id:
|
||||
return
|
||||
# 重启当前容器
|
||||
client.containers.get(container_id.strip()).restart()
|
||||
|
Reference in New Issue
Block a user