From a2f32dc7c40a3609bf1955c8168f54a1c45f6893 Mon Sep 17 00:00:00 2001 From: Leo Date: Sun, 14 Dec 2025 15:43:00 +0800 Subject: [PATCH] 1 --- manage_service.sh | 85 ++++++++++++++++++++++ setup_ubuntu.sh | 177 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 259 insertions(+), 3 deletions(-) create mode 100644 manage_service.sh diff --git a/manage_service.sh b/manage_service.sh new file mode 100644 index 0000000..2a03bfe --- /dev/null +++ b/manage_service.sh @@ -0,0 +1,85 @@ +#!/bin/bash +# 物流服务管理脚本 + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +cd "$SCRIPT_DIR" + +PID_FILE="logistics_service.pid" +LOG_FILE="logistics_service.log" + +case "$1" in + start) + echo "启动物流服务..." + if [ -f "$PID_FILE" ]; then + PID=$(cat "$PID_FILE") + if ps -p $PID > /dev/null 2>&1; then + echo "⚠️ 服务已在运行,PID: $PID" + exit 1 + else + rm -f "$PID_FILE" + fi + fi + ./run_logistics.sh --background + ;; + stop) + echo "停止物流服务..." + if [ ! -f "$PID_FILE" ]; then + echo "⚠️ PID 文件不存在,服务可能未运行" + exit 1 + fi + PID=$(cat "$PID_FILE") + if ps -p $PID > /dev/null 2>&1; then + kill $PID + sleep 1 + if ps -p $PID > /dev/null 2>&1; then + echo "强制停止服务..." + kill -9 $PID + fi + rm -f "$PID_FILE" + echo "✅ 服务已停止" + else + echo "⚠️ 进程不存在,清理 PID 文件" + rm -f "$PID_FILE" + fi + ;; + restart) + echo "重启物流服务..." + $0 stop + sleep 2 + $0 start + ;; + status) + if [ -f "$PID_FILE" ]; then + PID=$(cat "$PID_FILE") + if ps -p $PID > /dev/null 2>&1; then + echo "✅ 服务正在运行" + echo "PID: $PID" + echo "进程信息:" + ps -p $PID -o pid,ppid,cmd,etime + else + echo "❌ 服务未运行(PID 文件存在但进程不存在)" + rm -f "$PID_FILE" + fi + else + echo "❌ 服务未运行" + fi + ;; + logs) + if [ -f "$LOG_FILE" ]; then + tail -f "$LOG_FILE" + else + echo "日志文件不存在: $LOG_FILE" + fi + ;; + *) + echo "用法: $0 {start|stop|restart|status|logs}" + echo "" + echo "命令说明:" + echo " start - 启动服务(后台运行)" + echo " stop - 停止服务" + echo " restart - 重启服务" + echo " status - 查看服务状态" + echo " logs - 查看实时日志" + exit 1 + ;; +esac diff --git a/setup_ubuntu.sh b/setup_ubuntu.sh index 301a2f9..3d0c840 100644 --- a/setup_ubuntu.sh +++ b/setup_ubuntu.sh @@ -131,6 +131,10 @@ python3 -m pip install --upgrade pip echo "安装 DrissionPage..." python3 -m pip install DrissionPage +# 安装 Flask(API 服务需要) +echo "安装 Flask..." +python3 -m pip install flask + # 可选:如果需要数据库功能 read -p "是否需要数据库功能?(sqlalchemy, pymysql) [y/N]: " need_db if [ "$need_db" = "y" ] || [ "$need_db" = "Y" ]; then @@ -182,18 +186,76 @@ SCRIPT_FILE="jd/fetch_logistics_ubuntu.py" if [ ! -f "$SCRIPT_FILE" ]; then echo "❌ 错误: 找不到脚本文件 $SCRIPT_FILE" echo "当前目录: $(pwd)" + echo "文件列表:" + ls -la jd/ 2>/dev/null || echo " jd/ 目录不存在" + echo "" echo "请确保脚本文件存在" deactivate exit 1 fi +# 检查文件是否为空 +if [ ! -s "$SCRIPT_FILE" ]; then + echo "❌ 错误: 脚本文件 $SCRIPT_FILE 为空" + deactivate + exit 1 +fi + +# 修复脚本文件的行尾符问题 +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 + # 运行脚本 echo "使用 Python: $PYTHON_CMD" echo "运行脚本: $SCRIPT_FILE" +echo "脚本大小: $(wc -c < "$SCRIPT_FILE") 字节" echo "参数: $@" echo "" -$PYTHON_CMD "$SCRIPT_FILE" "$@" +if [ "$BACKGROUND" = "true" ]; then + # 后台运行模式 + LOG_FILE="logistics_service.log" + PID_FILE="logistics_service.pid" + + echo "以后台模式启动服务..." + 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 & + PID=$! + echo $PID > "$PID_FILE" + + # 等待一下,检查进程是否启动成功 + sleep 2 + if ps -p $PID > /dev/null 2>&1; then + echo "✅ 服务已启动,PID: $PID" + echo "查看日志: tail -f $LOG_FILE" + else + echo "❌ 服务启动失败,请查看日志: $LOG_FILE" + rm -f "$PID_FILE" + deactivate + exit 1 + fi +else + # 前台运行模式 + echo "以前台模式启动服务(按 Ctrl+C 停止)..." + echo "" + # 使用 -u 参数确保输出不被缓冲,并明确指定以脚本模式运行 + exec $PYTHON_CMD -u "$SCRIPT_FILE" "$@" +fi # 保存退出码 EXIT_CODE=$? @@ -207,6 +269,97 @@ EOF chmod +x run_logistics.sh +# 创建服务管理脚本 +cat > manage_service.sh << 'EOF' +#!/bin/bash +# 物流服务管理脚本 + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +cd "$SCRIPT_DIR" + +PID_FILE="logistics_service.pid" +LOG_FILE="logistics_service.log" + +case "$1" in + start) + echo "启动物流服务..." + if [ -f "$PID_FILE" ]; then + PID=$(cat "$PID_FILE") + if ps -p $PID > /dev/null 2>&1; then + echo "⚠️ 服务已在运行,PID: $PID" + exit 1 + else + rm -f "$PID_FILE" + fi + fi + ./run_logistics.sh --background + ;; + stop) + echo "停止物流服务..." + if [ ! -f "$PID_FILE" ]; then + echo "⚠️ PID 文件不存在,服务可能未运行" + exit 1 + fi + PID=$(cat "$PID_FILE") + if ps -p $PID > /dev/null 2>&1; then + kill $PID + sleep 1 + if ps -p $PID > /dev/null 2>&1; then + echo "强制停止服务..." + kill -9 $PID + fi + rm -f "$PID_FILE" + echo "✅ 服务已停止" + else + echo "⚠️ 进程不存在,清理 PID 文件" + rm -f "$PID_FILE" + fi + ;; + restart) + echo "重启物流服务..." + $0 stop + sleep 2 + $0 start + ;; + status) + if [ -f "$PID_FILE" ]; then + PID=$(cat "$PID_FILE") + if ps -p $PID > /dev/null 2>&1; then + echo "✅ 服务正在运行" + echo "PID: $PID" + echo "进程信息:" + ps -p $PID -o pid,ppid,cmd,etime + else + echo "❌ 服务未运行(PID 文件存在但进程不存在)" + rm -f "$PID_FILE" + fi + else + echo "❌ 服务未运行" + fi + ;; + logs) + if [ -f "$LOG_FILE" ]; then + tail -f "$LOG_FILE" + else + echo "日志文件不存在: $LOG_FILE" + fi + ;; + *) + echo "用法: $0 {start|stop|restart|status|logs}" + echo "" + echo "命令说明:" + echo " start - 启动服务(后台运行)" + echo " stop - 停止服务" + echo " restart - 重启服务" + echo " status - 查看服务状态" + echo " logs - 查看实时日志" + exit 1 + ;; +esac +EOF + +chmod +x manage_service.sh + # 6. 完成 echo "" echo "==========================================" @@ -214,14 +367,32 @@ echo "✅ 环境设置完成!" echo "==========================================" echo "" echo "快速开始:" -echo " 方式1: 使用便捷脚本" +echo " 方式1: 使用便捷脚本(前台运行)" echo " ./run_logistics.sh" echo "" -echo " 方式2: 手动运行" +echo " 方式2: 后台运行服务" +echo " ./run_logistics.sh --background" +echo " 或" +echo " ./run_logistics.sh -b" +echo "" +echo " 方式3: 手动运行" echo " source venv/bin/activate" echo " python jd/fetch_logistics_ubuntu.py" echo " deactivate" echo "" +echo "后台运行管理:" +echo " 方式1: 使用管理脚本(推荐)" +echo " ./manage_service.sh start - 启动服务" +echo " ./manage_service.sh stop - 停止服务" +echo " ./manage_service.sh restart - 重启服务" +echo " ./manage_service.sh status - 查看状态" +echo " ./manage_service.sh logs - 查看日志" +echo "" +echo " 方式2: 直接使用 run_logistics.sh" +echo " ./run_logistics.sh --background - 后台启动" +echo " tail -f logistics_service.log - 查看日志" +echo " kill \$(cat logistics_service.pid) - 停止服务" +echo "" echo "浏览器路径: $CHROME_PATH" echo "虚拟环境: $(pwd)/venv" echo ""