novel-doomsday-resurgence/tomato-novel/scripts/inkos_quality_monitor.sh

259 lines
6.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# inkos质量监控和服务脚本
# 在inkos启动前检查配置启动后监控输出质量
set -e
INKOS_DIR="/root/.openclaw/workspace/tomato-novel"
BOOKS_DIR="$INKOS_DIR/books"
CONFIG_FILE="$INKOS_DIR/inkos_format_config.json"
MONITOR_SCRIPT="$INKOS_DIR/scripts/format_check_fix.py"
LOG_DIR="$INKOS_DIR/logs"
# 创建日志目录
mkdir -p "$LOG_DIR"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
print_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查inkos是否已安装
check_inkos_installation() {
if command -v inkos &> /dev/null; then
print_success "inkos已安装"
inkos --version
return 0
else
print_error "inkos未安装"
exit 1
fi
}
# 检查配置
check_configuration() {
print_info "检查配置..."
if [ -f "$CONFIG_FILE" ]; then
print_success "格式配置文件存在: $CONFIG_FILE"
# 验证配置文件格式
if python3 -m json.tool "$CONFIG_FILE" > /dev/null 2>&1; then
print_success "配置文件格式正确"
else
print_error "配置文件格式错误"
exit 1
fi
else
print_error "配置文件不存在: $CONFIG_FILE"
exit 1
fi
if [ -f "$MONITOR_SCRIPT" ]; then
print_success "监控脚本存在: $MONITOR_SCRIPT"
else
print_error "监控脚本不存在: $MONITOR_SCRIPT"
exit 1
fi
}
# 检查项目目录
check_project_directories() {
print_info "检查项目目录..."
if [ -d "$INKOS_DIR" ]; then
print_success "inkos项目目录存在: $INKOS_DIR"
else
print_error "inkos项目目录不存在: $INKOS_DIR"
exit 1
fi
if [ -d "$BOOKS_DIR" ]; then
print_success "书籍目录存在: $BOOKS_DIR"
else
print_error "书籍目录不存在: $BOOKS_DIR"
exit 1
fi
}
# 修复现有章节
fix_existing_chapters() {
print_info "修复现有章节格式..."
# 为每个书籍目录执行修复
for book_dir in "$BOOKS_DIR"/*; do
if [ -d "$book_dir" ] && [ -d "$book_dir/chapters" ]; then
book_name=$(basename "$book_dir")
print_info "修复书籍: $book_name"
# 检查当前书籍是否有第2-14章
chapters_dir="$book_dir/chapters"
if [ -d "$chapters_dir" ]; then
python3 "$MONITOR_SCRIPT" fix --directory "$chapters_dir" 2>&1 | tee -a "$LOG_DIR/fix_${book_name}_$(date +%Y%m%d).log"
fi
fi
done
print_success "现有章节修复完成"
}
# 启动质量监控
start_quality_monitor() {
print_info "启动质量监控服务..."
# 启动监控进程
python3 "$MONITOR_SCRIPT" monitor --directory "$BOOKS_DIR" > "$LOG_DIR/monitor_$(date +%Y%m%d_%H%M%S).log" 2>&1 &
MONITOR_PID=$!
echo $MONITOR_PID > "$LOG_DIR/quality_monitor.pid"
print_success "质量监控服务已启动 (PID: $MONITOR_PID)"
# 输出监控信息
print_info "监控服务日志: $LOG_DIR/monitor_*.log"
print_info "监控PID文件: $LOG_DIR/quality_monitor.pid"
}
# 启动inkos
start_inkos() {
print_info "启动inkos..."
# 切换到项目目录
cd "$INKOS_DIR"
# 启动inkos
print_info "正在启动inkos守护进程..."
inkos up 2>&1 | tee -a "$LOG_DIR/inkos_startup_$(date +%Y%m%d_%H%M%S).log" &
INKOS_PID=$!
echo $INKOS_PID > "$LOG_DIR/inkos.pid"
print_success "inkos守护进程已启动 (PID: $INKOS_PID)"
# 等待inkos启动完成
sleep 10
# 检查inkos状态
inkos status
}
# 显示状态
show_status() {
print_info "系统状态:"
# 检查监控服务
if [ -f "$LOG_DIR/quality_monitor.pid" ] && ps -p $(cat "$LOG_DIR/quality_monitor.pid") > /dev/null 2>&1; then
print_success "质量监控服务运行中 (PID: $(cat $LOG_DIR/quality_monitor.pid))"
else
print_warning "质量监控服务未运行"
fi
# 检查inkos进程
if [ -f "$LOG_DIR/inkos.pid" ] && ps -p $(cat "$LOG_DIR/inkos.pid") > /dev/null 2>&1; then
print_success "inkos守护进程运行中 (PID: $(cat $LOG_DIR/inkos.pid)"
inkos status
else
print_warning "inkos守护进程未运行"
fi
# 显示最近日志
print_info "最近日志文件:"
ls -la "$LOG_DIR"/*.log | head -5
}
# 停止服务
stop_services() {
print_info "停止服务..."
# 停止inkos
if [ -f "$LOG_DIR/inkos.pid" ]; then
pid=$(cat "$LOG_DIR/inkos.pid")
if ps -p "$pid" > /dev/null 2>&1; then
kill "$pid"
print_success "inkos守护进程已停止PID$pid"
fi
rm -f "$LOG_DIR/inkos.pid"
fi
# 停止质量监控
if [ -f "$LOG_DIR/quality_monitor.pid" ]; then
pid=$(cat "$LOG_DIR/quality_monitor.pid")
if ps -p "$pid" > /dev/null 2>&1; then
kill "$pid"
print_success "质量监控服务已停止PID$pid"
fi
rm -f "$LOG_DIR/quality_monitor.pid"
fi
print_success "所有服务已停止"
}
# 主函数
main() {
print_info "inkos质量监控系统启动..."
echo "=============================================="
case "${1:-start}" in
start)
check_inkos_installation
check_configuration
check_project_directories
fix_existing_chapters
start_quality_monitor
start_inkos
print_success"系统启动完成"
show_status
;;
stop)
stop_services
;;
restart)
stop_services
sleep 2
check_inkos_installation
check_configuration
check_project_directories
start_quality_monitor
start_inkos
print_success"系统重启完成"
show_status
;;
status)
show_status
;;
fix)
fix_existing_chapters
;;
*)
echo "用法:$0 {start|stop|restart|status|fix}"
exit 1
;;
esac
echo"=============================================="
}
# 运行主函数
main"$@"