#!/bin/bash # 多线程结构化处理调度器启动脚本 # 使用方法: # ./start_evaluate.sh start # 启动调度器 # ./start_evaluate.sh stop # 停止调度器 # ./start_evaluate.sh status # 查看状态 # ./start_evaluate.sh restart # 重启调度器 SCRIPT_NAME="multi_thread_scheduler.py" PID_FILE="Evaluate_scheduler.pid" LOG_DIR="logs" # 检查Python环境 if ! command -v python3 &> /dev/null; then echo "错误: 未找到Python3,请先安装Python3" exit 1 fi # 检查依赖文件 if [ ! -f "evaluate.py" ]; then echo "错误: 未找到evaluate.py文件" exit 1 fi if [ ! -f "multi_thread_scheduler.py" ]; then echo "错误: 未找到multi_thread_scheduler.py文件" exit 1 fi # 创建logs目录 mkdir -p logs # 获取进程ID get_pid() { if [ -f "$PID_FILE" ]; then cat "$PID_FILE" else echo "" fi } # 检查进程是否运行 is_running() { local pid=$(get_pid) if [ -n "$pid" ]; then if ps -p "$pid" > /dev/null 2>&1; then return 0 else # 进程不存在,删除PID文件 rm -f "$PID_FILE" return 1 fi fi return 1 } # 启动调度器 start_scheduler() { if is_running; then echo "调度器已经在运行中 (PID: $(get_pid))" return 1 fi echo "正在启动多线程结构化处理调度器..." echo "日志文件将保存在 $LOG_DIR/ 目录中" # 后台运行Python脚本 nohup python3 "$SCRIPT_NAME" > "$LOG_DIR/evaluate_scheduler_stdout.log" 2>&1 & local pid=$! # 保存PID到文件 echo "$pid" > "$PID_FILE" echo "调度器已启动 (PID: $pid)" echo "使用以下命令查看状态:" echo " ./start_evaluate.sh status" echo " tail -f $LOG_DIR/evaluate_*.log" echo "" echo "使用以下命令停止:" echo " ./start_evaluate.sh stop" } # 停止调度器 stop_scheduler() { local pid=$(get_pid) if [ -z "$pid" ]; then echo "调度器未运行" return 1 fi echo "正在停止调度器 (PID: $pid)..." # 发送SIGTERM信号 kill -TERM "$pid" 2>/dev/null # 等待进程结束 local count=0 while [ $count -lt 10 ] && ps -p "$pid" > /dev/null 2>&1; do sleep 1 count=$((count + 1)) echo "等待进程结束... ($count/10)" done # 如果进程仍在运行,强制杀死 if ps -p "$pid" > /dev/null 2>&1; then echo "强制停止进程..." kill -KILL "$pid" 2>/dev/null fi # 删除PID文件 rm -f "$PID_FILE" echo "调度器已停止" } # 查看状态 show_status() { if is_running; then local pid=$(get_pid) echo "调度器正在运行 (PID: $pid)" echo "进程信息:" ps -p "$pid" -o pid,ppid,cmd,etime echo "" echo "最近的日志:" if [ -f "$LOG_DIR/evaluate_scheduler_$(date +%Y%m%d).log" ]; then tail -5 "$LOG_DIR/evaluate_scheduler_$(date +%Y%m%d).log" else echo "未找到今日日志文件" fi else echo "调度器未运行" fi } # 重启调度器 restart_scheduler() { echo "重启调度器..." stop_scheduler sleep 2 start_scheduler } # 主逻辑 case "${1:-start}" in start) start_scheduler ;; stop) stop_scheduler ;; status) show_status ;; restart) restart_scheduler ;; *) echo "用法: $0 {start|stop|status|restart}" echo "" echo "命令说明:" echo " start - 启动调度器" echo " stop - 停止调度器" echo " status - 查看运行状态" echo " restart - 重启调度器" echo "" echo "示例:" echo " $0 start # 启动" echo " $0 status # 查看状态" echo " $0 stop # 停止" exit 1 ;; esac