feat: 新增 systemd 持久化部署(deploy/ztools2.service + install-systemd.sh)
systemd 管理 zTools2 后端实现开机自启 + 崩溃自动重启: - deploy/ztools2.service 模板(Restart=on-failure,after mysql) - deploy/install-systemd.sh 自动检测 .venv 或系统 uvicorn,填充路径安装 - README 补持久化部署章节
This commit is contained in:
56
deploy/install-systemd.sh
Executable file
56
deploy/install-systemd.sh
Executable file
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env bash
|
||||
# 安装 systemd 服务,实现 zTools2 持久化部署(开机自启 + 崩溃自动重启)。
|
||||
#
|
||||
# 做的事:
|
||||
# 1. 用实际路径填充 deploy/ztools2.service 模板,写入 /etc/systemd/system/
|
||||
# 2. 停掉旧方式(start.sh 启动的 uvicorn),避免端口冲突
|
||||
# 3. systemctl daemon-reload + enable + start
|
||||
#
|
||||
# 用法:./deploy/install-systemd.sh
|
||||
# 卸载:systemctl disable --now ztools2 && rm /etc/systemd/system/ztools2.service && systemctl daemon-reload
|
||||
set -euo pipefail
|
||||
|
||||
cd "$(dirname "$0")/.."
|
||||
ROOT="$(pwd)"
|
||||
|
||||
# 解析 uvicorn 可执行路径:优先 .venv(setup.sh 标准),回退系统 python -m uvicorn
|
||||
if [[ -x "$ROOT/.venv/bin/uvicorn" ]]; then
|
||||
UVICORN="$ROOT/.venv/bin/uvicorn"
|
||||
PYBIN="$ROOT/.venv/bin/python"
|
||||
elif command -v uvicorn >/dev/null 2>&1; then
|
||||
UVICORN="$(command -v uvicorn)"
|
||||
PYBIN="$(command -v python3)"
|
||||
else
|
||||
echo "未找到 uvicorn:请先运行 ./setup.sh(建 .venv)或 pip install uvicorn" >&2
|
||||
exit 1
|
||||
fi
|
||||
[[ -f "$ROOT/config.yaml" ]] || { echo "未找到 config.yaml,请先运行 ./setup.sh" >&2; exit 1; }
|
||||
|
||||
UNIT_SRC="$ROOT/deploy/ztools2.service"
|
||||
UNIT_DST="/etc/systemd/system/ztools2.service"
|
||||
|
||||
echo "==> 生成 systemd unit(路径 $ROOT,uvicorn=$UVICORN)"
|
||||
# 同时填充 ROOT 与 UVICORN;PYBIN 备用(ExecStart 用 UVICORN 直接启动)
|
||||
sudo sed -e "s|__ZTOOLS2_DIR__|$ROOT|g" -e "s|__UVICORN__|$UVICORN|g" "$UNIT_SRC" > /tmp/ztools2.service
|
||||
sudo mv /tmp/ztools2.service "$UNIT_DST"
|
||||
sudo chmod 644 "$UNIT_DST"
|
||||
|
||||
echo "==> 停止旧方式(start.sh 启动的进程,若有)"
|
||||
./stop.sh >/dev/null 2>&1 || true
|
||||
|
||||
echo "==> 启用并启动 ztools2 服务"
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable ztools2
|
||||
sudo systemctl restart ztools2
|
||||
|
||||
sleep 2
|
||||
if systemctl is-active --quiet ztools2; then
|
||||
echo "✓ ztools2 已启动并设为开机自启"
|
||||
echo " 状态:systemctl status ztools2"
|
||||
echo " 日志:journalctl -u ztools2 -f"
|
||||
echo " 停止:sudo systemctl stop ztools2"
|
||||
echo " 重启:sudo systemctl restart ztools2"
|
||||
else
|
||||
echo "✗ ztools2 启动失败,查看日志:journalctl -u ztools2 -n 50" >&2
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user