auto-sync: 2026-03-26 00:56:43

This commit is contained in:
cfdaily
2026-03-26 00:56:43 +08:00
parent e134bfa5ed
commit 28693d31cf
8 changed files with 0 additions and 0 deletions
+95
View File
@@ -0,0 +1,95 @@
#!/bin/bash
# 文件监控脚本
# 实时监控目录变化,触发同步
PROJECT_DIR="/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live"
LOG_FILE="$PROJECT_DIR/file-watcher.log"
SYNC_SCRIPT="$PROJECT_DIR/auto-sync.sh"
LOCK_FILE="/tmp/sanguo_sync.lock"
# 确保脚本有执行权限
chmod +x "$SYNC_SCRIPT"
echo "[$(date)] Starting file watcher in $PROJECT_DIR" >> "$LOG_FILE"
echo "[$(date)] Watching for file changes..." >> "$LOG_FILE"
# 创建一个函数来执行同步
run_sync() {
# 检查锁文件,防止重复运行
if [ -f "$LOCK_FILE" ]; then
echo "[$(date)] Sync already in progress, skipping..." >> "$LOG_FILE"
return 0
fi
# 创建锁文件
touch "$LOCK_FILE"
echo "[$(date)] Detected file change, running sync..." >> "$LOG_FILE"
# 执行同步脚本
"$SYNC_SCRIPT"
sync_result=$?
if [ $sync_result -eq 0 ]; then
echo "[$(date)] Sync completed successfully" >> "$LOG_FILE"
else
echo "[$(date)] Sync failed with code $sync_result" >> "$LOG_FILE"
fi
# 删除锁文件
rm -f "$LOCK_FILE"
}
# 使用fswatch监控文件变化
# fswatch是一个跨平台的文件系统监控工具
# 如果没有安装fswatch,使用inotifywait或find命令替代
# 检查fswatch是否可用
if command -v fswatch &> /dev/null; then
echo "[$(date)] Using fswatch for file monitoring" >> "$LOG_FILE"
# fswatch: -e 排除.git目录,-r 递归,-0 输出null分隔符
fswatch -e "\.git" -e "\.log$" -r -0 "$PROJECT_DIR" | while read -d "" event
do
# 过滤掉一些不必要的文件类型
if [[ ! "$event" =~ \.log$ ]] && [[ ! "$event" =~ \.tmp$ ]] && [[ ! "$event" =~ ~$ ]]; then
run_sync
# 添加1秒延迟避免频繁触发
sleep 1
fi
done
elif command -v inotifywait &> /dev/null; then
echo "[$(date)] Using inotifywait for file monitoring" >> "$LOG_FILE"
# inotifywait: -r 递归,-m 持续监控,-e 事件类型
inotifywait -r -m -e create,modify,delete,move "$PROJECT_DIR" --exclude "\.git" --format "%w%f" | while read path
do
# 过滤掉日志文件
if [[ ! "$path" =~ \.log$ ]] && [[ ! "$path" =~ \.tmp$ ]] && [[ ! "$path" =~ ~$ ]]; then
run_sync
# 添加1秒延迟避免频繁触发
sleep 1
fi
done
else
echo "[$(date)] WARNING: fswatch and inotifywait not found, falling back to find polling" >> "$LOG_FILE"
echo "[$(date)] This is less efficient but will work" >> "$LOG_FILE"
# 使用find命令进行轮询(每5秒检查一次)
last_check_time=$(date +%s)
while true; do
current_time=$(date +%s)
# 检查是否有文件在最近5秒内被修改
# find命令查找最近修改的文件
changed_files=$(find "$PROJECT_DIR" -type f ! -name "*.log" ! -name "*.tmp" ! -name "*~" ! -path "*/.git/*" -mtime -5s 2>/dev/null | head -10)
if [ -n "$changed_files" ]; then
# 有文件变化,执行同步
run_sync
fi
# 等待5秒
sleep 5
done
fi
+16
View File
@@ -0,0 +1,16 @@
#!/bin/bash
# 重启文件监控器
# ============================================
# 停止当前监控
./stop-watcher.sh
# 等待一秒
sleep 1
# 启动新监控
./start-watcher.sh
# 显示状态
./status-watcher.sh
+48
View File
@@ -0,0 +1,48 @@
#!/bin/bash
# 启动简单文件监控脚本
PROJECT_DIR="/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live"
WATCHER_SCRIPT="$PROJECT_DIR/simple-file-watcher.py"
PID_FILE="$PROJECT_DIR/simple-watcher.pid"
LOG_FILE="$PROJECT_DIR/simple-watcher.log"
echo "Starting simple file watcher daemon..."
# 检查是否已经运行
if [ -f "$PID_FILE" ]; then
pid=$(cat "$PID_FILE")
if ps -p "$pid" > /dev/null 2>&1; then
echo "Simple file watcher is already running with PID $pid"
echo "To stop it, run: kill $pid && rm -f $PID_FILE"
exit 0
else
echo "Stale PID file found, removing..."
rm -f "$PID_FILE"
fi
fi
# 确保Python脚本可执行
chmod +x "$WATCHER_SCRIPT"
# 运行监控脚本(后台运行)
echo "Starting watcher process..."
nohup python3 "$WATCHER_SCRIPT" > /dev/null 2>&1 &
watcher_pid=$!
# 保存PID
echo $watcher_pid > "$PID_FILE"
echo "Simple file watcher started with PID $watcher_pid"
echo "PID saved to: $PID_FILE"
echo "Log file: $LOG_FILE"
echo ""
echo "To stop the watcher, run:"
echo " kill $(cat $PID_FILE) && rm -f $PID_FILE"
echo "or use: stop-simple-watcher.sh"
echo ""
echo "To view logs:"
echo " tail -f $LOG_FILE"
echo ""
echo "Watcher is now monitoring: $PROJECT_DIR"
echo "Files changed will trigger: $PROJECT_DIR/auto-sync.sh"
+39
View File
@@ -0,0 +1,39 @@
#!/bin/bash
# 启动文件监控脚本
PROJECT_DIR="/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live"
WATCHER_SCRIPT="$PROJECT_DIR/file-watcher.sh"
PID_FILE="$PROJECT_DIR/watcher.pid"
LOG_FILE="$PROJECT_DIR/file-watcher.log"
# 确保脚本有执行权限
chmod +x "$WATCHER_SCRIPT"
echo "Starting file watcher daemon..."
# 检查是否已经运行
if [ -f "$PID_FILE" ]; then
pid=$(cat "$PID_FILE")
if ps -p "$pid" > /dev/null 2>&1; then
echo "File watcher is already running with PID $pid"
exit 0
else
echo "Stale PID file found, removing..."
rm -f "$PID_FILE"
fi
fi
# 运行监控脚本(后台运行,不输出到控制台)
nohup bash "$WATCHER_SCRIPT" > /dev/null 2>&1 &
watcher_pid=$!
# 保存PID
echo $watcher_pid > "$PID_FILE"
echo "File watcher started with PID $watcher_pid"
echo "Log file: $LOG_FILE"
echo ""
echo "To stop the watcher, run:"
echo " kill $(cat $PID_FILE) && rm -f $PID_FILE"
echo "or run: ./stop-watcher.sh"
+77
View File
@@ -0,0 +1,77 @@
#!/bin/bash
# 检查简单文件监控脚本状态
PROJECT_DIR="/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live"
PID_FILE="$PROJECT_DIR/simple-watcher.pid"
LOG_FILE="$PROJECT_DIR/simple-watcher.log"
echo "=== Simple File Watcher Status ==="
echo "Project Directory: $PROJECT_DIR"
echo ""
# 检查PID文件
if [ -f "$PID_FILE" ]; then
pid=$(cat "$PID_FILE")
echo "PID File: $PID_FILE"
echo "Recorded PID: $pid"
if ps -p "$pid" > /dev/null 2>&1; then
echo "Status: ✅ RUNNING (PID: $pid)"
# 获取进程信息
echo ""
echo "Process Info:"
ps -p "$pid" -o pid,ppid,user,%cpu,%mem,etime,command
# 检查打开的文件
echo ""
echo "Open Files (lsof):"
lsof -p "$pid" 2>/dev/null | head -10
else
echo "Status: ❌ NOT RUNNING (stale PID)"
echo "Note: PID file exists but process is not running"
fi
else
echo "Status: ❌ NOT RUNNING"
echo "Reason: PID file not found"
fi
echo ""
# 检查日志文件
if [ -f "$LOG_FILE" ]; then
log_size=$(stat -f%z "$LOG_FILE" 2>/dev/null || stat -c%s "$LOG_FILE" 2>/dev/null)
echo "Log File: $LOG_FILE"
echo "Log Size: $log_size bytes"
echo ""
echo "=== Last 10 Log Entries ==="
tail -10 "$LOG_FILE" 2>/dev/null || echo "(log file empty or unreadable)"
else
echo "Log File: Not found"
fi
echo ""
# 检查是否有其他监控进程
echo "=== Other Watcher Processes ==="
echo "Active simple-file-watcher.py processes:"
ps aux | grep "simple-file-watcher.py" | grep -v grep
echo ""
echo "=== Quick Commands ==="
echo "Start watcher: ./start-simple-watcher.sh"
echo "Stop watcher: ./stop-simple-watcher.sh"
echo "View logs: tail -f $LOG_FILE"
echo ""
echo "=== Auto-sync Script ==="
SYNC_SCRIPT="$PROJECT_DIR/auto-sync.sh"
if [ -f "$SYNC_SCRIPT" ] && [ -x "$SYNC_SCRIPT" ]; then
echo "✅ Sync script exists and is executable"
else
echo "❌ Sync script missing or not executable"
fi
+55
View File
@@ -0,0 +1,55 @@
#!/bin/bash
# 检查文件监控状态
PROJECT_DIR="/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live"
PID_FILE="$PROJECT_DIR/watcher.pid"
LOG_FILE="$PROJECT_DIR/file-watcher.log"
SYNC_LOG="$PROJECT_DIR/auto-sync.log"
echo "=== File Watcher Status ==="
echo ""
# 检查PID文件
if [ ! -f "$PID_FILE" ]; then
echo "Status: NOT RUNNING (no PID file)"
echo ""
echo "To start: ./start-watcher.sh"
exit 1
fi
pid=$(cat "$PID_FILE")
if ps -p "$pid" > /dev/null 2>&1; then
echo "Status: RUNNING (PID: $pid)"
# 获取进程信息
echo ""
echo "Process Info:"
ps -p "$pid" -o pid,user,pcpu,pmem,start_time,etime,comm
# 检查日志文件
echo ""
echo "=== Watcher Log (last 10 lines) ==="
if [ -f "$LOG_FILE" ]; then
tail -10 "$LOG_FILE"
else
echo "Log file not found: $LOG_FILE"
fi
echo ""
echo "=== Sync Log (last 5 syncs) ==="
if [ -f "$SYNC_LOG" ]; then
grep -A2 "Starting auto sync" "$SYNC_LOG" | tail -15
else
echo "Sync log not found: $SYNC_LOG"
fi
else
echo "Status: NOT RUNNING (stale PID file: $pid)"
echo ""
echo "Cleaning up stale PID file..."
rm -f "$PID_FILE"
echo ""
echo "To start: ./start-watcher.sh"
exit 1
fi
+57
View File
@@ -0,0 +1,57 @@
#!/bin/bash
# 停止简单文件监控脚本
PROJECT_DIR="/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live"
PID_FILE="$PROJECT_DIR/simple-watcher.pid"
echo "Stopping simple file watcher..."
if [ -f "$PID_FILE" ]; then
pid=$(cat "$PID_FILE")
if ps -p "$pid" > /dev/null 2>&1; then
echo "Killing process with PID $pid..."
kill "$pid"
# 等待进程结束
sleep 1
if ps -p "$pid" > /dev/null 2>&1; then
echo "Process still running, sending SIGKILL..."
kill -9 "$pid"
fi
echo "Process stopped"
else
echo "No running process found with PID $pid"
fi
# 删除PID文件
rm -f "$PID_FILE"
echo "PID file removed: $PID_FILE"
else
echo "PID file not found: $PID_FILE"
echo "Trying to find and kill any running simple-file-watcher processes..."
# 查找并杀死相关进程
pids=$(ps aux | grep "simple-file-watcher.py" | grep -v grep | awk '{print $2}')
if [ -n "$pids" ]; then
echo "Found processes: $pids"
for pid in $pids; do
echo "Killing PID $pid..."
kill "$pid" 2>/dev/null
sleep 0.5
if ps -p "$pid" > /dev/null 2>&1; then
kill -9 "$pid" 2>/dev/null
fi
done
echo "All simple file watcher processes stopped"
else
echo "No simple file watcher processes found"
fi
fi
echo "Simple file watcher stopped successfully"
+38
View File
@@ -0,0 +1,38 @@
#!/bin/bash
# 停止文件监控脚本
PROJECT_DIR="/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live"
PID_FILE="$PROJECT_DIR/watcher.pid"
if [ ! -f "$PID_FILE" ]; then
echo "File watcher is not running (no PID file found)"
exit 0
fi
pid=$(cat "$PID_FILE")
if ps -p "$pid" > /dev/null 2>&1; then
echo "Stopping file watcher (PID: $pid)..."
kill "$pid"
# 等待进程结束
for i in {1..10}; do
if ! ps -p "$pid" > /dev/null 2>&1; then
break
fi
sleep 1
done
# 强制终止如果还活着
if ps -p "$pid" > /dev/null 2>&1; then
echo "Force killing process..."
kill -9 "$pid"
fi
rm -f "$PID_FILE"
echo "File watcher stopped"
else
echo "Process $pid not found, removing stale PID file"
rm -f "$PID_FILE"
fi