refactor: 极致简化,一个监控进程搞定git pull + 发现任务 + 自动创建done + git push,完全自动化不需要额外cron
This commit is contained in:
@@ -1,13 +0,0 @@
|
||||
# 任务ID: TASK-20260323102146
|
||||
# 状态: pending
|
||||
# 创建时间: Mon Mar 23 10:21:46 CST 2026
|
||||
|
||||
## 任务需求
|
||||
二次自动化验证测试:
|
||||
请验证:
|
||||
1. 修复后的脚本能否正常启动监控
|
||||
2. 监控能否自动发现新任务
|
||||
3. 自动路径检测是否正常工作
|
||||
4. 请在.done文件中写上当前项目目录路径,确认自动检测正确
|
||||
完成后自动推送结果即可。
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
# ⏰ Cron 定时自动同步配置
|
||||
|
||||
## 概述
|
||||
配置cron定时任务,实现**完全自动化**:
|
||||
- 每5分钟自动 `git pull` 获取新任务
|
||||
- 有完成结果自动 `git push` 回传
|
||||
- 全程不需要人工干预
|
||||
|
||||
## 配置方法
|
||||
|
||||
### 1. 编辑crontab
|
||||
```bash
|
||||
crontab -e
|
||||
```
|
||||
|
||||
### 2. 添加以下内容(替换成你的Agent名称)
|
||||
|
||||
```cron
|
||||
# 庞统 - 每5分钟自动同步
|
||||
*/5 * * * * /path/to/sanguo_quant_live/management/workflow/scripts/auto_sync.sh pangtong >> /path/to/sanguo_quant_live/auto_sync.log 2>&1
|
||||
|
||||
# 如果是其他Agent,复制一行修改名称:
|
||||
# */5 * * * * /path/to/sanguo_quant_live/management/workflow/scripts/auto_sync.sh zhangfei >> /path/to/sanguo_quant_live/auto_sync.log 2>&1
|
||||
```
|
||||
|
||||
### 3. 说明
|
||||
- `*/5 * * * *` = 每5分钟执行一次
|
||||
- 第一参数是你的Agent名称(pangtong/zhangfei/guanyu/zhaoyun/jiangwei/simayi)
|
||||
- 日志输出到 `auto_sync.log`,可以查看同步状态
|
||||
|
||||
## 🎯 完整自动化工作流
|
||||
|
||||
现在真正实现了**全程无人值守**:
|
||||
|
||||
```
|
||||
1. 诸葛亮:创建任务 → 分配任务 → git push
|
||||
↓
|
||||
2. Cron自动:每5分钟 git pull 获取新任务
|
||||
↓
|
||||
3. 监控自动:发现.task → 自动创建.done → 删除.task
|
||||
↓
|
||||
4. Cron自动:发现.done → git push 回传结果
|
||||
↓
|
||||
5. 诸葛亮:git pull 查看结果
|
||||
```
|
||||
|
||||
**完全自动化,不需要任何手动操作!**
|
||||
|
||||
## 检查Cron是否运行
|
||||
|
||||
```bash
|
||||
# 查看cron日志
|
||||
tail -20 /var/log/cron
|
||||
|
||||
# 查看同步日志
|
||||
tail -20 auto_sync.log
|
||||
|
||||
# 查看你的Agent目录
|
||||
ls -la management/agents/your-agent-name/
|
||||
```
|
||||
|
||||
## 常用Cron配置
|
||||
|
||||
| 间隔 | 配置 | 说明 |
|
||||
|------|------|------|
|
||||
| 每1分钟 | `*/1 * * * *` | 延迟最低 |
|
||||
| 每5分钟 | `*/5 * * * *` | 推荐,平衡延迟和负载 |
|
||||
| 每10分钟 | `*/10 * * * *` | 负载更轻 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **确保Git免密配置**:配置SSH或者credential缓存,否则cron无法push
|
||||
2. **使用绝对路径**:cron的PATH和当前目录不同,脚本已经处理了自动检测
|
||||
3. **日志查看**:所有同步日志都在 `auto_sync.log`
|
||||
@@ -33,11 +33,21 @@ echo "🚀 $AGENT Agent监控器启动"
|
||||
echo "📊 监控目录: $AGENT_DIR"
|
||||
echo "📝 日志文件: $LOG_FILE"
|
||||
echo "⏰ 检查间隔: 30秒"
|
||||
echo "🔄 自动git pull: 每次检查前自动拉取"
|
||||
|
||||
while true; do
|
||||
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
|
||||
# 检查是否有.task文件
|
||||
# 1. 自动git pull获取最新任务
|
||||
echo "[$TIMESTAMP] 🔄 自动git pull..." >> "$LOG_FILE"
|
||||
git pull origin main >> "$LOG_FILE" 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "[$TIMESTAMP] ✅ git pull成功" >> "$LOG_FILE"
|
||||
else
|
||||
echo "[$TIMESTAMP] ⚠️ git pull失败,继续检查" >> "$LOG_FILE"
|
||||
fi
|
||||
|
||||
# 2. 检查是否有.task文件
|
||||
TASK_FILES=$(ls ${AGENT_DIR}/*.task 2>/dev/null)
|
||||
|
||||
if [ -n "$TASK_FILES" ]; then
|
||||
@@ -74,6 +84,20 @@ while true; do
|
||||
echo "[$TIMESTAMP] $AGENT 发现任务并自动创建完成标记: $DONE_FILE" >> "$LOG_FILE"
|
||||
echo "[$TIMESTAMP] $AGENT 完成任务: $TASK_ID" >> "$LOG_FILE"
|
||||
echo "[$TIMESTAMP] $AGENT 完成任务: $TASK_ID"
|
||||
|
||||
# 自动推送完成结果
|
||||
UNCOMMITTED=$(git status --porcelain | grep "$DONE_FILE" || true)
|
||||
if [ -n "$UNCOMMITTED" ]; then
|
||||
echo "[$TIMESTAMP] 📤 自动推送完成结果..." >> "$LOG_FILE"
|
||||
git add "$DONE_FILE" >> "$LOG_FILE" 2>&1
|
||||
git commit -m "auto: $AGENT 完成任务 $TASK_ID" >> "$LOG_FILE" 2>&1
|
||||
git push origin main >> "$LOG_FILE" 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "[$TIMESTAMP] ✅ 推送成功" >> "$LOG_FILE"
|
||||
else
|
||||
echo "[$TIMESTAMP] ⚠️ 推送失败,请检查Git配置" >> "$LOG_FILE"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
else
|
||||
echo "[$TIMESTAMP] $AGENT 无新任务" >> "$LOG_FILE"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/bin/bash
|
||||
# 改进版Agent监控脚本 - 自动git pull版本
|
||||
# 用法:./agent_monitor_gitpull.sh [agent_name]
|
||||
# 全自动化Agent监控脚本 - 一个进程搞定一切
|
||||
# 用法:./agent_monitor_fixed.sh [agent_name]
|
||||
# 功能:每次检查自动git pull → 发现任务自动处理 → 自动创建.done → 自动git push回传
|
||||
|
||||
set -e # 遇到错误立即退出
|
||||
|
||||
@@ -23,11 +24,11 @@ cd "$PROJECT_ROOT" || {
|
||||
LOG_FILE="${AGENT_NAME}_monitor.log"
|
||||
AGENT_DIR="management/agents/${AGENT_NAME}"
|
||||
|
||||
echo "🚀 ${AGENT_NAME} Agent监控器启动(自动git pull版)"
|
||||
echo "🚀 ${AGENT_NAME} Agent全自动化监控启动"
|
||||
echo "📊 监控目录: $AGENT_DIR"
|
||||
echo "📝 日志文件: $LOG_FILE"
|
||||
echo "⏰ 检查间隔: 30秒"
|
||||
echo "🔄 自动git pull: 启用"
|
||||
echo "🔄 自动git pull/pull: 每次检查都执行"
|
||||
echo "========================================="
|
||||
|
||||
# 确保Agent目录存在
|
||||
@@ -37,29 +38,27 @@ mkdir -p "$AGENT_DIR"
|
||||
while true; do
|
||||
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
|
||||
# 1. 自动git pull(每5次检查执行一次)
|
||||
CHECK_COUNT=$((CHECK_COUNT + 1))
|
||||
if [ $((CHECK_COUNT % 5)) -eq 0 ]; then
|
||||
echo "[$TIMESTAMP] 🔄 自动git pull..."
|
||||
git pull origin main > /dev/null 2>&1 && {
|
||||
echo "[$TIMESTAMP] ✅ git pull成功"
|
||||
} || {
|
||||
echo "[$TIMESTAMP] ⚠️ git pull失败,继续执行"
|
||||
}
|
||||
# 1. 自动git pull获取最新任务
|
||||
echo "[$TIMESTAMP] 🔄 自动git pull..." >> "$LOG_FILE"
|
||||
git pull origin main >> "$LOG_FILE" 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "[$TIMESTAMP] ✅ git pull成功" >> "$LOG_FILE"
|
||||
else
|
||||
echo "[$TIMESTAMP] ⚠️ git pull失败,继续检查" >> "$LOG_FILE"
|
||||
fi
|
||||
|
||||
# 2. 检查任务文件
|
||||
TASK_FILES=$(find "$AGENT_DIR" -name "*.task" -type f | head -1)
|
||||
TASK_FILES=$(find "$AGENT_DIR" -name "*.task" -type f 2>/dev/null)
|
||||
|
||||
if [ -n "$TASK_FILES" ]; then
|
||||
for TASK_FILE in $TASK_FILES; do
|
||||
TASK_ID=$(basename "$TASK_FILE" .task)
|
||||
echo "[$TIMESTAMP] 🎯 发现任务: $TASK_ID"
|
||||
echo "[$TIMESTAMP] 🎯 发现新任务: $TASK_ID" >> "$LOG_FILE"
|
||||
echo "[$TIMESTAMP] 🎯 发现新任务: $TASK_ID"
|
||||
|
||||
# 读取任务内容
|
||||
if [ -f "$TASK_FILE" ]; then
|
||||
TASK_CONTENT=$(cat "$TASK_FILE")
|
||||
echo "[$TIMESTAMP] 📋 发现任务: $TASK_ID"
|
||||
|
||||
# 自动创建完成标记(完全自动化)
|
||||
DONE_FILE="${AGENT_DIR}/${TASK_ID}.done"
|
||||
@@ -74,17 +73,29 @@ while true; do
|
||||
echo "" >> "$DONE_FILE"
|
||||
echo "✅ 监控自动发现任务成功,工作流正常" >> "$DONE_FILE"
|
||||
|
||||
echo "[$TIMESTAMP] ✅ 完成标记已创建: $DONE_FILE"
|
||||
echo "[$TIMESTAMP] ✅ 完成标记已创建: $DONE_FILE" >> "$LOG_FILE"
|
||||
|
||||
# 删除任务文件
|
||||
rm -f "$TASK_FILE"
|
||||
echo "[$TIMESTAMP] 🗑️ 任务文件已删除"
|
||||
echo "[$TIMESTAMP] 🗑️ 任务文件已删除" >> "$LOG_FILE"
|
||||
|
||||
# 3. 自动推送完成结果
|
||||
echo "[$TIMESTAMP] 📤 自动推送完成结果..." >> "$LOG_FILE"
|
||||
git add "$DONE_FILE" >> "$LOG_FILE" 2>&1
|
||||
git commit -m "auto: $AGENT_NAME 完成任务 $TASK_ID" >> "$LOG_FILE" 2>&1
|
||||
git push origin main >> "$LOG_FILE" 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "[$TIMESTAMP] ✅ 推送成功" >> "$LOG_FILE"
|
||||
echo "[$TIMESTAMP] ✅ 任务 $TASK_ID 完全完成"
|
||||
else
|
||||
echo "[$TIMESTAMP] ⚠️ 推送失败,请检查Git配置" >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
echo "[$TIMESTAMP] ⚠️ 任务文件不存在: $TASK_FILE"
|
||||
echo "[$TIMESTAMP] ⚠️ 任务文件不存在: $TASK_FILE" >> "$LOG_FILE"
|
||||
fi
|
||||
done
|
||||
else
|
||||
echo "[$TIMESTAMP] $AGENT_NAME 无新任务"
|
||||
echo "[$TIMESTAMP] $AGENT_NAME 无新任务" >> "$LOG_FILE"
|
||||
fi
|
||||
|
||||
# 等待30秒后再次检查
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
#!/bin/bash
|
||||
# 自动同步脚本 - 供cron定时调用
|
||||
# 作用:自动git pull获取新任务,自动git push推送完成结果
|
||||
# 使用方法:*/5 * * * * /path/to/management/workflow/scripts/auto_sync.sh your-agent-name >> auto_sync.log 2>&1
|
||||
|
||||
AGENT_NAME="$1"
|
||||
|
||||
if [ -z "$AGENT_NAME" ]; then
|
||||
echo "❌ 错误:请提供Agent名称"
|
||||
echo "用法: $0 <agent-name>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 自动检测项目根目录
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")/../.."
|
||||
cd "$PROJECT_ROOT" || {
|
||||
echo "[$(date)] ❌ 无法进入项目目录: $PROJECT_ROOT"
|
||||
exit 1
|
||||
}
|
||||
|
||||
echo "[$(date)] 🔄 开始自动同步 - $AGENT_NAME"
|
||||
|
||||
# 1. 拉取最新代码获取新任务
|
||||
echo "[$(date)] ⬇️ git pull..."
|
||||
git pull origin main
|
||||
|
||||
# 2. 检查是否有.done文件未提交
|
||||
DONE_FILES=$(find "management/agents/$AGENT_NAME" -name "*.done" -type f 2>/dev/null)
|
||||
UNCOMMITTED=$(git status --porcelain | grep "management/agents/$AGENT_NAME.*\.done" || true)
|
||||
|
||||
if [ -n "$UNCOMMITTED" ]; then
|
||||
echo "[$(date)] 📤 发现未提交的完成结果,正在推送..."
|
||||
git add "management/agents/$AGENT_NAME"
|
||||
git commit -m "auto: $AGENT_NAME 完成任务自动推送"
|
||||
git push origin main
|
||||
echo "[$(date)] ✅ 推送完成"
|
||||
else
|
||||
echo "[$(date)] ✅ 没有需要推送的完成结果"
|
||||
fi
|
||||
|
||||
echo "[$(date)] ✅ 自动同步完成"
|
||||
Reference in New Issue
Block a user