Files
zTools2/deploy/install-systemd.sh
zikai 29c5462734 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 补持久化部署章节
2026-07-27 13:52:23 +08:00

57 lines
2.1 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 可执行路径:优先 .venvsetup.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路径 $ROOTuvicorn=$UVICORN"
# 同时填充 ROOT 与 UVICORNPYBIN 备用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