Files
post_crawler/service.sh
T
2026-05-26 21:02:17 +08:00

80 lines
1.5 KiB
Bash

#!/bin/bash
# 配置
APP_NAME="crawler"
APP_DIR="/opt/app/crawler"
VENV_DIR="$APP_DIR/venv"
LOG_FILE="$APP_DIR/app.log"
PID_FILE="$APP_DIR/app.pid"
DISPLAY_NUM=":1"
# 启动
start() {
if [ -f "$PID_FILE" ] && kill -0 $(cat "$PID_FILE") 2>/dev/null; then
echo "$APP_NAME 已经在运行 (PID: $(cat $PID_FILE))"
return 1
fi
echo "启动 $APP_NAME..."
cd "$APP_DIR"
source "$VENV_DIR/bin/activate"
nohup env DISPLAY=$DISPLAY_NUM python -m uvicorn src.main:app --host 0.0.0.0 --port 8000 > "$LOG_FILE" 2>&1 &
echo $! > "$PID_FILE"
echo "$APP_NAME 已启动 (PID: $!)"
}
# 停止
stop() {
if [ ! -f "$PID_FILE" ]; then
echo "$APP_NAME 未运行"
return 1
fi
PID=$(cat "$PID_FILE")
if kill -0 "$PID" 2>/dev/null; then
echo "停止 $APP_NAME (PID: $PID)..."
kill "$PID"
rm -f "$PID_FILE"
echo "$APP_NAME 已停止"
else
echo "$APP_NAME 未运行,清理 PID 文件"
rm -f "$PID_FILE"
fi
}
# 重启
restart() {
stop
sleep 2
start
}
# 状态
status() {
if [ -f "$PID_FILE" ] && kill -0 $(cat "$PID_FILE") 2>/dev/null; then
echo "$APP_NAME 运行中 (PID: $(cat $PID_FILE))"
else
echo "$APP_NAME 未运行"
fi
}
# 查看日志
logs() {
tail -f "$LOG_FILE"
}
# 使用说明
usage() {
echo "用法: $0 {start|stop|restart|status|logs}"
}
# 主逻辑
case "$1" in
start) start ;;
stop) stop ;;
restart) restart ;;
status) status ;;
logs) logs ;;
*) usage ;;
esac