123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- #!/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
|