#!/bin/bash # dododo 服务: 支持并发执行 # 修复版: 智能等待,不再疯狂重启 LOG_FILE="/var/log/openclaw/dododo.log" LOCK_FILE="/tmp/dododo_service.lock" # 避免重复启动 if [ -f "$LOCK_FILE" ]; then PID=$(cat "$LOCK_FILE") if kill -0 "$PID" 2>/dev/null; then echo "$(date) - dododo 已在运行 (PID: $PID)" exit 1 fi fi echo $$ > "$LOCK_FILE" log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE } log "========== dododo_service 启动 ==========" while true; do # 检查是否应该运行 CURRENT_MIN=$(date '+%M') CURRENT_HOUR=$(date '+%H') # 只在每小时的 02-55 分运行 if [ "$CURRENT_MIN" -ge 2 ] && [ "$CURRENT_MIN" -lt 55 ]; then log "========== $CURRENT_HOUR:$CURRENT_MIN - dododo.py 启动 ==========" cd /root/.openclaw/workspace && python3 dododo.py --auto --wait 30 --stop-minute 55 --workers 3 2>&1 | while read line; do log "$line" done EXIT_CODE=$? log "dododo.py 退出码: $EXIT_CODE" else: # 不在运行时间段,等待到下个02分 if [ "$CURRENT_MIN" -lt 2 ]; then WAIT_MIN=$((2 - CURRENT_MIN)) else WAIT_MIN=$((60 - CURRENT_MIN + 2)) fi WAIT_SEC=$((WAIT_MIN * 60)) log "不在运行时间 ($CURRENT_HOUR:$CURRENT_MIN),等待 ${WAIT_MIN} 分钟..." sleep $WAIT_SEC fi # 休息一下再检查,避免CPU空转 sleep 10 done