This commit is contained in:
Leo
2025-12-22 22:56:17 +08:00
parent a2f32dc7c4
commit 7c7076f4ef

View File

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