124 lines
3.7 KiB
Bash
Executable File
124 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
echo "=== 修复 inkos 审计问题 ==="
|
||
|
||
# 1. 停止所有 inkos 进程
|
||
echo "1. 停止 inkos 进程..."
|
||
pkill -f "inkos" 2>/dev/null
|
||
sleep 3
|
||
|
||
# 2. 备份当前状态
|
||
echo "2. 备份当前状态..."
|
||
BACKUP_DIR="/root/.openclaw/workspace/backups/inkos_fix_$(date +%Y%m%d_%H%M%S)"
|
||
mkdir -p "$BACKUP_DIR"
|
||
cp -r /root/.openclaw/workspace/tomato-novel/books/末日重生-开局囤货十亿物资/story/state/* "$BACKUP_DIR/" 2>/dev/null || true
|
||
|
||
# 3. 修复 index.json 数据问题
|
||
echo "3. 修复 index.json 数据问题..."
|
||
cd /root/.openclaw/workspace/tomato-novel/books/末日重生-开局囤货十亿物资/chapters
|
||
|
||
# 检查并修复空标题问题
|
||
python3 -c "
|
||
import json
|
||
import os
|
||
|
||
try:
|
||
with open('index.json', 'r', encoding='utf-8') as f:
|
||
data = json.load(f)
|
||
|
||
print(f'原始条目数: {len(data)}')
|
||
|
||
# 修复空标题
|
||
fixed_count = 0
|
||
for i, item in enumerate(data):
|
||
if 'title' not in item or not item['title'] or item['title'].strip() == '':
|
||
if 'number' in item:
|
||
item['title'] = f'第{item[\"number\"]}章'
|
||
fixed_count += 1
|
||
else:
|
||
item['title'] = '未命名章节'
|
||
fixed_count += 1
|
||
|
||
print(f'修复了 {fixed_count} 个空标题')
|
||
|
||
# 保存修复后的文件
|
||
with open('index.json', 'w', encoding='utf-8') as f:
|
||
json.dump(data, f, ensure_ascii=False, indent=2)
|
||
|
||
print('index.json 修复完成')
|
||
|
||
except Exception as e:
|
||
print(f'修复 index.json 时出错: {e}')
|
||
"
|
||
|
||
# 4. 清理运行时文件
|
||
echo "4. 清理运行时文件..."
|
||
RUNTIME_DIR="/root/.openclaw/workspace/tomato-novel/books/末日重生-开局囤货十亿物资/story/runtime"
|
||
if [ -d "$RUNTIME_DIR" ]; then
|
||
# 备份运行时文件
|
||
cp -r "$RUNTIME_DIR" "$BACKUP_DIR/runtime_backup" 2>/dev/null || true
|
||
|
||
# 清理有问题的运行时文件(保留前100章)
|
||
find "$RUNTIME_DIR" -name "chapter-*.json" -type f | sort -V | tail -n +101 | xargs rm -f 2>/dev/null || true
|
||
echo "已清理 chapter-100 之后的运行时文件"
|
||
fi
|
||
|
||
# 5. 重置 inkos 状态
|
||
echo "5. 重置 inkos 状态..."
|
||
STATE_DIR="/root/.openclaw/workspace/tomato-novel/books/末日重生-开局囤货十亿物资/story/state"
|
||
if [ -d "$STATE_DIR" ]; then
|
||
# 创建新的状态文件
|
||
cat > "$STATE_DIR/current_state.md" << 'EOF'
|
||
# 当前状态
|
||
|
||
## 角色状态
|
||
- **陈末**: 在城西旧货场棚子,伤口感染,正在制定对付疤哥的计划
|
||
- **小雨**: 在吴建军物流园安全位置
|
||
- **小野**: 在吴建军物流园安全位置
|
||
- **疤哥**: 资金链断裂,老鬼跑路,手下离心
|
||
- **刀疤刘**: 准备趁机夺回城南地盘
|
||
- **眼镜**: 已离开,提供监控系统后门
|
||
|
||
## 物资状态
|
||
- 钢材交易完成,定金5万已付
|
||
- 监控系统后门密码: 20260816
|
||
- 现金: 约10万
|
||
- 武器: 匕首一把
|
||
|
||
## 时间线
|
||
- 当前时间: 8月16日晚上
|
||
- 末日倒计时: 25天
|
||
- 疤哥计划对胡文斌下手: 3天后
|
||
|
||
## 主要威胁
|
||
1. 疤哥势力威胁
|
||
2. 伤口感染恶化
|
||
3. 物资安全
|
||
4. 时间紧迫
|
||
EOF
|
||
|
||
echo "状态文件已重置"
|
||
fi
|
||
|
||
# 6. 启动 inkos
|
||
echo "6. 启动 inkos..."
|
||
cd /root/.openclaw/workspace/tomato-novel && nohup inkos up > /tmp/inkos_fix_start.log 2>&1 &
|
||
|
||
# 等待启动
|
||
sleep 10
|
||
|
||
# 7. 检查状态
|
||
echo "7. 检查状态..."
|
||
if ps aux | grep -q "inkos up" | grep -v grep; then
|
||
PID=$(ps aux | grep "inkos up" | grep -v grep | awk '{print $2}')
|
||
echo "✅ inkos 守护进程已启动 (PID: $PID)"
|
||
|
||
# 检查书籍状态
|
||
cd /root/.openclaw/workspace/tomato-novel && inkos status 2>/dev/null || echo "无法获取状态"
|
||
else
|
||
echo "❌ inkos 启动失败"
|
||
echo "查看日志: tail -50 /tmp/inkos_fix_start.log"
|
||
fi
|
||
|
||
echo "=== 修复完成 ==="
|
||
echo "备份位置: $BACKUP_DIR" |