diff --git a/setup_ubuntu.sh b/setup_ubuntu.sh index 3d0c840..b40d716 100644 --- a/setup_ubuntu.sh +++ b/setup_ubuntu.sh @@ -206,17 +206,19 @@ sed -i 's/\r$//' "$SCRIPT_FILE" 2>/dev/null || true # 检查是否要后台运行 BACKGROUND=false -if [ "$1" = "--background" ] || [ "$1" = "-b" ] || [ "$1" = "--daemon" ] || [ "$1" = "-d" ]; then - BACKGROUND=true - shift # 移除后台运行参数 -fi +ARGS=() +for arg in "$@"; do + if [ "$arg" = "--background" ] || [ "$arg" = "-b" ] || [ "$arg" = "--daemon" ] || [ "$arg" = "-d" ]; then + BACKGROUND=true + else + ARGS+=("$arg") + fi +done # 运行脚本 echo "使用 Python: $PYTHON_CMD" echo "运行脚本: $SCRIPT_FILE" echo "脚本大小: $(wc -c < "$SCRIPT_FILE") 字节" -echo "参数: $@" -echo "" if [ "$BACKGROUND" = "true" ]; then # 后台运行模式 @@ -227,22 +229,26 @@ if [ "$BACKGROUND" = "true" ]; then echo "日志文件: $LOG_FILE" echo "PID 文件: $PID_FILE" echo "" - echo "使用以下命令管理服务:" - echo " 查看日志: tail -f $LOG_FILE" - echo " 停止服务: kill \$(cat $PID_FILE)" - echo " 查看进程: ps aux | grep fetch_logistics_ubuntu" - echo "" - # 使用 nohup 后台运行 - nohup $PYTHON_CMD -u "$SCRIPT_FILE" "$@" > "$LOG_FILE" 2>&1 & + # 使用 nohup 后台运行,确保使用虚拟环境的 Python + # 注意:不传递 --background 参数给 Python 脚本 + nohup $PYTHON_CMD -u "$SCRIPT_FILE" "${ARGS[@]}" > "$LOG_FILE" 2>&1 & PID=$! echo $PID > "$PID_FILE" # 等待一下,检查进程是否启动成功 - sleep 2 + sleep 3 if ps -p $PID > /dev/null 2>&1; then echo "✅ 服务已启动,PID: $PID" - echo "查看日志: tail -f $LOG_FILE" + echo "" + echo "使用以下命令管理服务:" + echo " 查看日志: tail -f $LOG_FILE" + echo " 停止服务: ./manage_service.sh stop" + echo " 查看状态: ./manage_service.sh status" + echo "" + # 后台模式下,不退出虚拟环境(因为后台进程已经独立运行) + # 直接退出脚本 + exit 0 else echo "❌ 服务启动失败,请查看日志: $LOG_FILE" rm -f "$PID_FILE" @@ -251,20 +257,18 @@ if [ "$BACKGROUND" = "true" ]; then fi else # 前台运行模式 + echo "参数: ${ARGS[@]}" + echo "" echo "以前台模式启动服务(按 Ctrl+C 停止)..." echo "" # 使用 -u 参数确保输出不被缓冲,并明确指定以脚本模式运行 - exec $PYTHON_CMD -u "$SCRIPT_FILE" "$@" + # 使用 exec 替换当前进程,这样 deactivate 不会执行 + exec $PYTHON_CMD -u "$SCRIPT_FILE" "${ARGS[@]}" + # 如果 exec 失败(不应该发生),才会执行到这里 + EXIT_CODE=$? + deactivate + exit $EXIT_CODE fi - -# 保存退出码 -EXIT_CODE=$? - -# 退出虚拟环境 -deactivate - -# 返回脚本的退出码 -exit $EXIT_CODE EOF chmod +x run_logistics.sh @@ -292,7 +296,22 @@ case "$1" in rm -f "$PID_FILE" fi fi - ./run_logistics.sh --background + # 重定向输出,避免显示在终端 + ./run_logistics.sh --background > /dev/null 2>&1 + sleep 2 + if [ -f "$PID_FILE" ]; then + PID=$(cat "$PID_FILE") + if ps -p $PID > /dev/null 2>&1; then + echo "✅ 服务已启动,PID: $PID" + echo "查看日志: tail -f $LOG_FILE" + else + echo "❌ 服务启动失败,请查看日志: $LOG_FILE" + exit 1 + fi + else + echo "❌ 服务启动失败,请查看日志: $LOG_FILE" + exit 1 + fi ;; stop) echo "停止物流服务..."