From b0dfb37d98829edd9715fd4749b4a9fdefc2852a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=B5=E6=9B=A6?= Date: Wed, 18 Dec 2024 21:36:14 +0800 Subject: [PATCH] =?UTF-8?q?build:=20=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 5 ++--- supervisor.conf | 13 ++++++++++++- xiaomusic/httpserver.py | 11 ++--------- xiaomusic/utils.py | 13 ++++++++----- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/Dockerfile b/Dockerfile index abb157d..e941098 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,8 +18,7 @@ COPY --from=builder /app/xiaomusic.py . COPY --from=builder /app/xiaomusic/__init__.py /base_version.py RUN touch /app/.dockerenv -RUN mkdir -p /etc/supervisor/conf.d -COPY supervisor.conf /etc/supervisor/conf.d/supervisor.conf +COPY supervisor.conf /etc/supervisor.conf ENV XIAOMUSIC_HOSTNAME=192.168.2.5 ENV XIAOMUSIC_PORT=8090 @@ -29,4 +28,4 @@ EXPOSE 8090 ENV TZ=Asia/Shanghai ENV PATH=/app/.venv/bin:$PATH -CMD ["/usr/bin/supervisord", "-n"] +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor.conf"] diff --git a/supervisor.conf b/supervisor.conf index d634f7f..15fd1f6 100644 --- a/supervisor.conf +++ b/supervisor.conf @@ -1,5 +1,16 @@ +[unix_http_server] +file=/var/run/supervisor.sock ; Unix套接字文件路径 +chmod=0777 ; 套接字权限 + [supervisord] -nodaemon=true # 确保 supervisord 在前台运行,以便 Docker 容器不会退出 +nodaemon=true ; 非守护模式,适合容器运行 +pidfile=/tmp/supervisord.pid ; PID文件路径 + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[supervisorctl] +serverurl=unix:///var/run/supervisor.sock ; 使用Unix套接字与服务通信 [program:xiaomusic] command=/app/.venv/bin/python3 /app/xiaomusic.py diff --git a/xiaomusic/httpserver.py b/xiaomusic/httpserver.py index 12f65d3..5f4424f 100644 --- a/xiaomusic/httpserver.py +++ b/xiaomusic/httpserver.py @@ -588,18 +588,11 @@ async def playlistdelmusic(data: PlayListMusicObj, Verifcation=Depends(verificat async def updateversion( version: str = "", lite: bool = True, Verifcation=Depends(verification) ): - ret = update_version(version, lite) + ret = await update_version(version, lite) if ret != "OK": return {"ret": ret} - proc = restart_xiaomusic() - - async def check_proc(): - # 等待子进程完成 - exit_code = await proc.wait() - log.info(f"Restart completed with exit code {exit_code}") - - asyncio.create_task(check_proc()) + asyncio.create_task(restart_xiaomusic()) return {"ret": "OK"} diff --git a/xiaomusic/utils.py b/xiaomusic/utils.py index 7f398b4..6f37720 100644 --- a/xiaomusic/utils.py +++ b/xiaomusic/utils.py @@ -1029,7 +1029,9 @@ async def restart_xiaomusic(): cmd = " ".join(sbp_args) log.info(f"restart_xiaomusic: {cmd}") proc = await asyncio.create_subprocess_exec(*sbp_args) - return proc + exit_code = await proc.wait() # 等待子进程完成 + log.info(f"restart_xiaomusic completed with exit code {exit_code}") + return exit_code async def update_version(version: str, lite: bool = True): @@ -1047,9 +1049,7 @@ async def update_version(version: str, lite: bool = True): # https://github.com/hanxi/xiaomusic/releases/download/main/app-amd64-lite.tar.gz url = f"https://github.hanxi.cc/proxy/hanxi/xiaomusic/releases/download/{version}/app-{arch}{lite_tag}.tar.gz" target_directory = "/app" - await download_and_extract(url, target_directory) - - return "OK" + return await download_and_extract(url, target_directory) def get_os_architecture(): @@ -1072,6 +1072,7 @@ def get_os_architecture(): async def download_and_extract(url: str, target_directory: str): + ret = "OK" # 创建目标目录 os.makedirs(target_directory, exist_ok=True) @@ -1095,7 +1096,9 @@ async def download_and_extract(url: str, target_directory: str): tar.extractall(path=target_directory) log.info(f"文件解压完成到: {target_directory}") else: - log.warning(f"下载失败, 状态码: {response.status}") + ret = f"下载失败, 状态码: {response.status}" + log.warning(ret) + return ret def chmodfile(file_path: str):