#!/bin/bash # 监控 inkos 守护进程脚本 # 作者:番茄小说创作助手 # 功能:每小时检查 inkos 状态,如果停止则修复并重启 LOG_FILE="/tmp/inkos-monitor.log" DAEMON_LOG="/tmp/inkos-daemon.log" PROJECT_DIR="/root/.openclaw/workspace/tomato-novel" # 记录日志 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE" } # 检查 inkos 守护进程是否在运行 check_inkos_daemon() { if pgrep -f "inkos up" > /dev/null; then log "✅ inkos 守护进程正在运行" return 0 else log "❌ inkos 守护进程已停止" return 1 fi } # 检查 inkos 项目状态 check_inkos_status() { cd "$PROJECT_DIR" 2>/dev/null || { log "错误:无法进入项目目录 $PROJECT_DIR" return 1 } # 检查书籍状态 BOOKS=$(inkos book list 2>/dev/null) if [ $? -eq 0 ]; then log "📚 书籍状态:" echo "$BOOKS" | while IFS= read -r line; do log " $line" done else log "⚠️ 无法获取书籍列表" fi # 检查章节数量 if [ -d "books" ]; then for book_dir in books/*/; do if [ -d "${book_dir}chapters" ]; then CHAPTER_COUNT=$(find "${book_dir}chapters" -name "*.md" -o -name "*.json" 2>/dev/null | wc -l) BOOK_NAME=$(basename "$book_dir") log " 书籍 '$BOOK_NAME' 有 $CHAPTER_COUNT 个章节" fi done fi } # 重启 inkos 守护进程 restart_inkos_daemon() { log "🔄 正在重启 inkos 守护进程..." # 停止所有 inkos 进程 pkill -f "inkos up" 2>/dev/null sleep 2 # 启动守护进程 cd "$PROJECT_DIR" && nohup inkos up > "$DAEMON_LOG" 2>&1 & sleep 5 if check_inkos_daemon; then log "✅ inkos 守护进程重启成功" else log "❌ inkos 守护进程重启失败" # 尝试修复配置 log "🔧 尝试修复配置..." fix_inkos_config # 再次尝试启动 cd "$PROJECT_DIR" && nohup inkos up > "$DAEMON_LOG" 2>&1 & sleep 5 if check_inkos_daemon; then log "✅ 修复后 inkos 守护进程启动成功" else log "❌ 修复后 inkos 守护进程仍无法启动" fi fi } # 修复 inkos 配置 fix_inkos_config() { log "🔧 检查并修复 inkos 配置..." # 检查 API 配置 if [ ! -f "$PROJECT_DIR/.env" ]; then log " 创建缺失的 .env 文件" cat > "$PROJECT_DIR/.env" << EOF # LLM Configuration INKOS_LLM_PROVIDER=custom INKOS_LLM_BASE_URL=https://ark.cn-beijing.volces.com/api/coding/v3 INKOS_LLM_API_KEY=63589785-b399-47dd-8423-d2433938f169 INKOS_LLM_MODEL=deepseek-v3.2 EOF fi # 检查项目完整性 if [ ! -d "$PROJECT_DIR/books" ]; then log " 项目目录不完整,尝试修复..." mkdir -p "$PROJECT_DIR/books" fi } # 主函数 main() { log "="*50 log "开始监控 inkos..." # 检查守护进程 if ! check_inkos_daemon; then log "⚠️ inkos 守护进程已停止,正在尝试重启..." restart_inkos_daemon else log "✅ inkos 守护进程运行正常" fi # 检查项目状态 check_inkos_status log "监控完成" log "="*50 echo "" } # 执行主函数 main