Files
zTools2/start.sh
zikai 80b96d236f init: 从 /root/zikai 根目录迁入
把原本散落在 /root/zikai 的 FastAPI 服务整理到 server/ 子目录,
开启独立 git 与 venv。运行时数据(config.yaml / keys / uploads)
按 .gitignore 留在工作目录但不入仓。
2026-06-23 16:17:31 +00:00

62 lines
2.0 KiB
Bash
Executable File
Raw 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
# 启动 HTTPuvicorn与 SFTP已在运行则跳过幂等
set -euo pipefail
cd "$(dirname "$0")"
ROOT="$(pwd)"
VENV="$ROOT/.venv"
PY="$VENV/bin/python"
[ -x "$PY" ] || { echo "未找到 venv$VENV,请先运行 ./setup.sh" >&2; exit 1; }
[ -f "$ROOT/config.yaml" ] || { echo "未找到 config.yaml请先运行 ./setup.sh" >&2; exit 1; }
mkdir -p "$ROOT/logs" "$ROOT/uploads"
# 启动前清理upload_service.py 用 .part 后缀做原子写,进程已停时残留必为半成品。
PART_COUNT=$(find "$ROOT/uploads" -type f -name '*.part' -printf '.' 2>/dev/null | wc -c)
if [ "$PART_COUNT" -gt 0 ]; then
find "$ROOT/uploads" -type f -name '*.part' -delete
echo "清理:删除残留 .part 文件 $PART_COUNT"
fi
is_running() { [ -f "$1" ] && kill -0 "$(cat "$1")" 2>/dev/null; }
# --- HTTP ---
APP_PID="$ROOT/app.pid"
if is_running "$APP_PID"; then
echo "HTTP 已在运行 (pid $(cat "$APP_PID"))"
else
read -r HOST PORT <<<"$("$PY" - <<'PY'
import yaml
c = yaml.safe_load(open("config.yaml"))
print(c["server"]["host"], c["server"]["port"])
PY
)"
nohup "$VENV/bin/uvicorn" app.main:app \
--host "$HOST" --port "$PORT" \
>>"$ROOT/logs/app.log" 2>&1 &
echo $! > "$APP_PID"
echo "HTTP 启动 pid=$(cat "$APP_PID") 监听 ${HOST}:${PORT} 日志 logs/app.log"
fi
# --- SFTP ---
SFTP_PID="$ROOT/sftp.pid"
SFTP_ENABLED="$("$PY" - <<'PY'
import yaml
print("true" if yaml.safe_load(open("config.yaml")).get("sftp", {}).get("enabled", True) else "false")
PY
)"
if [ "$SFTP_ENABLED" = "true" ]; then
if is_running "$SFTP_PID"; then
echo "SFTP 已在运行 (pid $(cat "$SFTP_PID"))"
else
nohup "$PY" -m app.services.sftp_server >>"$ROOT/logs/sftp.log" 2>&1 &
echo $! > "$SFTP_PID"
echo "SFTP 启动 pid=$(cat "$SFTP_PID") 日志 logs/sftp.log"
fi
else
echo "SFTP 已在配置中禁用,跳过。"
fi
echo "docs: http://127.0.0.1:6867/docs (对外 https://f.zikai.wang/docs)"