| | #!/bin/bash |
| | |
| | |
| |
|
| | |
| | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| | GRADIO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" |
| | cd "$GRADIO_DIR" |
| |
|
| | |
| | MICROMAMBA_ENV="/data/hongzefu/maniskillenv1120" |
| |
|
| | |
| | LOG_DIR="$GRADIO_DIR/logs" |
| | PID_FILE="$GRADIO_DIR/server.pid" |
| | |
| | LOG_FILE="$LOG_DIR/server.log" |
| |
|
| | |
| | mkdir -p "$LOG_DIR" |
| |
|
| | |
| | start_server() { |
| | |
| | if [ -f "$PID_FILE" ]; then |
| | OLD_PID=$(cat "$PID_FILE") |
| | if ps -p "$OLD_PID" > /dev/null 2>&1; then |
| | echo "⚠️ 服务器已经在运行中 (PID: $OLD_PID)" |
| | echo " 如需重启,请使用: bash $0 restart" |
| | return 1 |
| | else |
| | echo "清理旧的 PID 文件..." |
| | rm -f "$PID_FILE" |
| | fi |
| | fi |
| |
|
| | |
| | if [ ! -d "$MICROMAMBA_ENV" ]; then |
| | echo "❌ 错误: Micromamba 环境不存在: $MICROMAMBA_ENV" |
| | return 1 |
| | fi |
| |
|
| | |
| | PYTHON_EXE="$MICROMAMBA_ENV/bin/python" |
| | if [ ! -f "$PYTHON_EXE" ]; then |
| | echo "❌ 错误: Python 可执行文件不存在: $PYTHON_EXE" |
| | return 1 |
| | fi |
| |
|
| | |
| | echo "🚀 正在后台启动服务器..." |
| | echo " Micromamba 环境: $MICROMAMBA_ENV" |
| | echo " Python 可执行文件: $PYTHON_EXE" |
| | echo " 工作目录: $GRADIO_DIR" |
| | echo " 日志文件: $LOG_FILE" |
| | echo "" |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | if command -v stdbuf >/dev/null 2>&1; then |
| | |
| | nohup env PATH="$MICROMAMBA_ENV/bin:$PATH" \ |
| | PYTHONUNBUFFERED=1 \ |
| | PYTHONIOENCODING=utf-8 \ |
| | stdbuf -oL -eL "$PYTHON_EXE" -u "$GRADIO_DIR/main.py" >> "$LOG_FILE" 2>&1 & |
| | else |
| | |
| | |
| | nohup env PATH="$MICROMAMBA_ENV/bin:$PATH" \ |
| | PYTHONUNBUFFERED=1 \ |
| | PYTHONIOENCODING=utf-8 \ |
| | "$PYTHON_EXE" -u "$GRADIO_DIR/main.py" >> "$LOG_FILE" 2>&1 & |
| | fi |
| |
|
| | |
| | SERVER_PID=$! |
| | echo $SERVER_PID > "$PID_FILE" |
| |
|
| | |
| | sleep 3 |
| |
|
| | if ps -p "$SERVER_PID" > /dev/null 2>&1; then |
| | echo "✅ 服务器已成功在后台启动!" |
| | echo " PID: $SERVER_PID" |
| | echo " Micromamba 环境: $MICROMAMBA_ENV" |
| | echo " 日志文件: $LOG_FILE" |
| | echo "" |
| | echo "📋 常用命令:" |
| | echo " 查看实时日志: bash $0 logs" |
| | echo " 查看状态: bash $0 status" |
| | echo " 停止服务器: bash $0 stop" |
| | echo "" |
| | echo "💡 提示:" |
| | echo " - 所有输出都保存在 $LOG_FILE(包括所有 print、uvicorn 日志等)" |
| | echo " - 日志实时写入,与前台运行完全一致" |
| | echo " - 即使关闭SSH连接,服务器也会继续运行" |
| | echo " - 使用 PYTHONUNBUFFERED=1 和 stdbuf 确保日志实时写入" |
| | echo "" |
| | echo "🌐 服务器启动后,请查看日志文件获取访问地址:" |
| | echo " bash $0 logs" |
| | return 0 |
| | else |
| | echo "❌ 服务器启动失败!" |
| | echo " 请查看完整日志: $LOG_FILE" |
| | rm -f "$PID_FILE" |
| | return 1 |
| | fi |
| | } |
| |
|
| | |
| | stop_server() { |
| | |
| | if [ ! -f "$PID_FILE" ]; then |
| | echo "⚠️ 未找到 PID 文件,服务器可能未运行" |
| | return 1 |
| | fi |
| |
|
| | |
| | SERVER_PID=$(cat "$PID_FILE") |
| |
|
| | |
| | if ! ps -p "$SERVER_PID" > /dev/null 2>&1; then |
| | echo "⚠️ 进程 $SERVER_PID 不存在,可能已经停止" |
| | rm -f "$PID_FILE" |
| | return 1 |
| | fi |
| |
|
| | |
| | echo "🛑 正在停止服务器 (PID: $SERVER_PID)..." |
| | kill "$SERVER_PID" |
| |
|
| | |
| | for i in {1..10}; do |
| | if ! ps -p "$SERVER_PID" > /dev/null 2>&1; then |
| | echo "✅ 服务器已成功停止" |
| | rm -f "$PID_FILE" |
| | return 0 |
| | fi |
| | sleep 1 |
| | done |
| |
|
| | |
| | if ps -p "$SERVER_PID" > /dev/null 2>&1; then |
| | echo "⚠️ 进程未响应,强制终止..." |
| | kill -9 "$SERVER_PID" |
| | sleep 1 |
| | if ! ps -p "$SERVER_PID" > /dev/null 2>&1; then |
| | echo "✅ 服务器已强制停止" |
| | rm -f "$PID_FILE" |
| | return 0 |
| | else |
| | echo "❌ 无法停止服务器,请手动检查" |
| | return 1 |
| | fi |
| | fi |
| | } |
| |
|
| | |
| | status_server() { |
| | echo "📊 服务器状态信息" |
| | echo "==========================================" |
| |
|
| | |
| | if [ ! -f "$PID_FILE" ]; then |
| | echo "❌ 服务器未运行 (未找到 PID 文件)" |
| | return 1 |
| | fi |
| |
|
| | SERVER_PID=$(cat "$PID_FILE") |
| |
|
| | |
| | if ps -p "$SERVER_PID" > /dev/null 2>&1; then |
| | echo "✅ 服务器正在运行" |
| | echo " PID: $SERVER_PID" |
| | echo "" |
| | |
| | |
| | echo "📋 进程信息:" |
| | ps -p "$SERVER_PID" -o pid,ppid,user,%cpu,%mem,etime,cmd |
| | echo "" |
| | |
| | |
| | if [ -f "$LOG_FILE" ]; then |
| | LOG_SIZE=$(du -h "$LOG_FILE" | cut -f1) |
| | LOG_LINES=$(wc -l < "$LOG_FILE" 2>/dev/null || echo "0") |
| | echo "📄 日志文件信息:" |
| | echo " 文件: $LOG_FILE" |
| | echo " 大小: $LOG_SIZE" |
| | echo " 行数: $LOG_LINES" |
| | echo " 最后修改: $(stat -c %y "$LOG_FILE" 2>/dev/null || stat -f %Sm "$LOG_FILE" 2>/dev/null || echo "未知")" |
| | fi |
| | |
| | |
| | if [ -f "$LOG_FILE" ]; then |
| | echo "" |
| | echo "📝 最近的日志输出 (最后10行):" |
| | echo "----------------------------------------" |
| | tail -n 10 "$LOG_FILE" |
| | fi |
| | return 0 |
| | else |
| | echo "❌ 服务器未运行 (进程 $SERVER_PID 不存在)" |
| | echo " 清理 PID 文件..." |
| | rm -f "$PID_FILE" |
| | return 1 |
| | fi |
| | } |
| |
|
| | |
| | restart_server() { |
| | echo "🔄 正在重启服务器..." |
| | stop_server |
| | sleep 2 |
| | start_server |
| | } |
| |
|
| | |
| | view_logs() { |
| | if [ ! -f "$LOG_FILE" ]; then |
| | echo "⚠️ 日志文件不存在: $LOG_FILE" |
| | return 1 |
| | fi |
| | |
| | echo "📝 查看服务器日志 (按 Ctrl+C 退出)" |
| | echo "==========================================" |
| | tail -f "$LOG_FILE" |
| | } |
| |
|
| | |
| | show_help() { |
| | echo "HistoryBench 服务器管理脚本" |
| | echo "" |
| | echo "使用方法:" |
| | echo " bash $0 [命令]" |
| | echo "" |
| | echo "可用命令:" |
| | echo " start - 启动服务器(后台运行)" |
| | echo " stop - 停止服务器" |
| | echo " status - 查看服务器状态" |
| | echo " restart - 重启服务器" |
| | echo " logs - 查看实时日志(按 Ctrl+C 退出)" |
| | echo " help - 显示此帮助信息" |
| | echo "" |
| | echo "示例:" |
| | echo " bash $0 start # 启动服务器" |
| | echo " bash $0 status # 查看状态" |
| | echo " bash $0 logs # 查看日志" |
| | echo " bash $0 stop # 停止服务器" |
| | echo "" |
| | } |
| |
|
| | |
| | case "${1:-help}" in |
| | start) |
| | start_server |
| | ;; |
| | stop) |
| | stop_server |
| | ;; |
| | status) |
| | status_server |
| | ;; |
| | restart) |
| | restart_server |
| | ;; |
| | logs) |
| | view_logs |
| | ;; |
| | help|--help|-h) |
| | show_help |
| | ;; |
| | *) |
| | echo "❌ 未知命令: $1" |
| | echo "" |
| | show_help |
| | exit 1 |
| | ;; |
| | esac |
| |
|
| | exit $? |
| |
|