Files
edict/scripts/run_loop.sh
cft0808 709e163932 feat: 添加远程 Skills 资源管理功能
新增远程 skill 管理系统,支持从 GitHub/HTTPS URL 获取:
- API 端点: add-remote-skill, remote-skills-list, update-remote-skill, remove-remote-skill
- CLI 工具: scripts/skill_manager.py (add-remote, list-remote, update-remote, remove-remote, import-official-hub)
- 文档: remote-skills-guide.md 和 remote-skills-quickstart.md
- 功能: 安全验证、YAML 校验、版本管理、多渠道操作
2026-03-02 06:21:28 +08:00

69 lines
2.1 KiB
Bash
Executable File

#!/bin/bash
# 三省六部 · 数据刷新循环
# 用法: ./run_loop.sh [间隔秒数] (默认 15)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
INTERVAL="${1:-15}"
LOG="/tmp/sansheng_liubu_refresh.log"
PIDFILE="/tmp/sansheng_liubu_refresh.pid"
MAX_LOG_SIZE=$((10 * 1024 * 1024)) # 10MB
# ── 单实例保护 ──
if [[ -f "$PIDFILE" ]]; then
OLD_PID=$(cat "$PIDFILE" 2>/dev/null)
if kill -0 "$OLD_PID" 2>/dev/null; then
echo "❌ 已有实例运行中 (PID=$OLD_PID),退出"
exit 1
fi
rm -f "$PIDFILE"
fi
echo $$ > "$PIDFILE"
# ── 优雅退出 ──
cleanup() {
echo "$(date '+%H:%M:%S') [loop] 收到退出信号,清理中..." >> "$LOG"
rm -f "$PIDFILE"
exit 0
}
trap cleanup SIGINT SIGTERM EXIT
# ── 日志轮转 ──
rotate_log() {
if [[ -f "$LOG" ]] && (( $(stat -f%z "$LOG" 2>/dev/null || stat -c%s "$LOG" 2>/dev/null || echo 0) > MAX_LOG_SIZE )); then
mv "$LOG" "${LOG}.1"
echo "$(date '+%H:%M:%S') [loop] 日志已轮转" > "$LOG"
fi
}
SCAN_INTERVAL="${2:-120}" # 巡检间隔(秒), 默认 120
SCAN_COUNTER=0
echo "🏛️ 三省六部数据刷新循环启动 (PID=$$)"
echo " 脚本目录: $SCRIPT_DIR"
echo " 间隔: ${INTERVAL}s"
echo " 巡检间隔: ${SCAN_INTERVAL}s"
echo " 日志: $LOG"
echo " PID文件: $PIDFILE"
echo " 按 Ctrl+C 停止"
while true; do
rotate_log
python3 "$SCRIPT_DIR/sync_from_openclaw_runtime.py" >> "$LOG" 2>&1 || true
python3 "$SCRIPT_DIR/sync_agent_config.py" >> "$LOG" 2>&1 || true
python3 "$SCRIPT_DIR/apply_model_changes.py" >> "$LOG" 2>&1 || true
python3 "$SCRIPT_DIR/sync_officials_stats.py" >> "$LOG" 2>&1 || true
python3 "$SCRIPT_DIR/refresh_live_data.py" >> "$LOG" 2>&1 || true
# 定期巡检:检测卡住的任务并自动重试
SCAN_COUNTER=$((SCAN_COUNTER + INTERVAL))
if (( SCAN_COUNTER >= SCAN_INTERVAL )); then
SCAN_COUNTER=0
curl -s -X POST http://127.0.0.1:7891/api/scheduler-scan \
-H 'Content-Type: application/json' -d '{"thresholdSec":180}' >> "$LOG" 2>&1 || true
fi
sleep "$INTERVAL"
done