#!/bin/bash # weread - 微信读书数据看板 服务管理命令 # 用法: # weread start [port] 启动服务(默认端口 8080) # weread stop [port] 停止服务(默认端口 8080) PROJECT_DIR="/Users/hwj/Codes/MyProjects/WeReadBoard" PID_FILE="$PROJECT_DIR/.server.pid" LOG_FILE="/tmp/weread_server.log" DEFAULT_PORT=8080 get_port() { echo "${1:-$DEFAULT_PORT}" } get_pid() { local port="$1" if [ -f "$PID_FILE" ]; then local saved_port saved_port=$(sed -n '2p' "$PID_FILE" 2>/dev/null) local pid pid=$(head -1 "$PID_FILE" 2>/dev/null) if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then echo "$pid" return fi fi lsof -i :"$port" -t 2>/dev/null | head -1 } is_running() { local port="$1" if [ -n "$(get_pid "$port")" ]; then return 0 fi return 1 } cmd_start() { local port port=$(get_port "$1") if is_running "$port"; then echo "❌ 服务已在运行 (PID: $(get_pid "$port"), 端口: $port)" exit 1 fi echo "启动服务(端口: $port)..." WEREAD_PORT="$port" nohup python3 "$PROJECT_DIR/app.py" > "$LOG_FILE" 2>&1 & local pid=$! printf '%s\n%s\n' "$pid" "$port" > "$PID_FILE" sleep 2 if kill -0 "$pid" 2>/dev/null; then echo "✅ 服务已启动" echo " PID: $pid" echo " 端口: $port" echo " 访问: http://127.0.0.1:$port" echo " 日志: $LOG_FILE" else echo "❌ 启动失败,请查看日志: $LOG_FILE" cat "$LOG_FILE" 2>/dev/null rm -f "$PID_FILE" exit 1 fi } cmd_stop() { local port port=$(get_port "$1") if ! is_running "$port"; then echo "服务未运行(端口: $port)" exit 0 fi local pid pid=$(get_pid "$port") echo "停止服务 (PID: $pid, 端口: $port)..." kill "$pid" 2>/dev/null sleep 1 if kill -0 "$pid" 2>/dev/null; then kill -9 "$pid" 2>/dev/null fi rm -f "$PID_FILE" echo "✅ 已停止" } usage() { echo "用法:" echo " weread start [port] 启动服务(默认端口 8080)" echo " weread stop [port] 停止服务(默认端口 8080)" exit 1 } case "${1}" in start) cmd_start "$2" ;; stop) cmd_stop "$2" ;; *) usage ;; esac