1
This commit is contained in:
85
manage_service.sh
Normal file
85
manage_service.sh
Normal file
@@ -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
|
||||
177
setup_ubuntu.sh
177
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 ""
|
||||
|
||||
Reference in New Issue
Block a user