From 88a2162b623cddea8e1c3147a2483b77b064b686 Mon Sep 17 00:00:00 2001 From: WangDL Date: Wed, 20 May 2026 16:32:22 +0800 Subject: [PATCH] fix systemd: use startup.sh instead of inline ExecStartPre Multi-line Python in ExecStartPre is invalid systemd syntax. Extract pip install + reranker self-test into startup.sh. Co-Authored-By: Claude Opus 4.7 --- rag-worker/startup.sh | 21 +++++++++++++++++++++ rag-worker/zhixi-worker.service | 14 +------------- 2 files changed, 22 insertions(+), 13 deletions(-) create mode 100755 rag-worker/startup.sh diff --git a/rag-worker/startup.sh b/rag-worker/startup.sh new file mode 100755 index 0000000..7948665 --- /dev/null +++ b/rag-worker/startup.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# zhixi-worker startup checks — called by systemd ExecStartPre +set -e +cd /opt/zhixi/backend/rag-worker + +# Install any new dependencies +/usr/bin/python3.11 -m pip install -q -r requirements.txt \ + -i https://mirrors.tencentyun.com/pypi/simple + +# Self-test: reranker +/usr/bin/python3.11 -c " +import asyncio +from reranker import rerank +async def t(): + r = await rerank('测试', ['这是测试文本', '无关内容'], top_n=1) + if not r: + raise RuntimeError('reranker returned empty') + print(f'[self-test] reranker OK, score={r[0][\"score\"]:.4f}') +asyncio.run(t()) +print('[self-test] all checks passed') +" diff --git a/rag-worker/zhixi-worker.service b/rag-worker/zhixi-worker.service index 5313201..e011322 100644 --- a/rag-worker/zhixi-worker.service +++ b/rag-worker/zhixi-worker.service @@ -9,19 +9,7 @@ WorkingDirectory=/opt/zhixi/backend/rag-worker Environment="PYTHONUNBUFFERED=1" EnvironmentFile=/opt/zhixi/backend/rag-worker/.env -# Install deps and self-test before starting main loop -ExecStartPre=/usr/bin/python3.11 -m pip install -q -r /opt/zhixi/backend/rag-worker/requirements.txt -i https://mirrors.tencentyun.com/pypi/simple -ExecStartPre=/usr/bin/python3.11 -c " -import asyncio, sys -from reranker import rerank -async def t(): - r = await rerank('测试', ['这是测试文本', '无关内容'], top_n=1) - if not r: raise RuntimeError('reranker returned empty') - print(f'[self-test] reranker OK, score={r[0][\"score\"]:.4f}') -asyncio.run(t()) -print('[self-test] all checks passed') -" - +ExecStartPre=/bin/bash /opt/zhixi/backend/rag-worker/startup.sh ExecStart=/usr/bin/python3.11 -u main.py Restart=always RestartSec=5