Files

109 lines
2.3 KiB
Bash

#!/bin/bash
# OpenClaw Daily Backup Script
# 매일 새벽 3시에 실행
set -euo pipefail
# Load self-review library (V5.0.1 AOP)
# shellcheck source=/dev/null
source "$(dirname "$0")/../lib/self-review-lib.sh"
# Self-review metrics
START_TIME=$(date +%s)
BACKUP_DIR=~/openclaw/backups
DATE=$(date +%Y%m%d-%H%M)
BACKUP_NAME="backup-${DATE}-DAILY"
LOG_FILE=~/.openclaw/logs/backup.log
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}
# Main backup logic
main() {
log "=== Backup Started ==="
# 백업 대상 디렉토리
TARGETS=(
"$HOME/openclaw"
"$HOME/.openclaw/openclaw.json"
"$HOME/.openclaw/agents"
"$HOME/clawd/scripts"
)
# 임시 디렉토리 생성
TEMP_DIR=$(mktemp -d)
trap "rm -rf $TEMP_DIR" EXIT
# 파일 복사
for target in "${TARGETS[@]}"; do
if [ -e "$target" ]; then
cp -r "$target" "$TEMP_DIR/" 2>/dev/null || true
fi
done
# 압축
cd "$TEMP_DIR"
tar -czf "${BACKUP_DIR}/${BACKUP_NAME}.tgz" . 2>/dev/null
# GPG 암호화 (암호 파일이 있는 경우)
if [ -f ~/.openclaw/.backup-passphrase ]; then
gpg --batch --yes --symmetric --cipher-algo AES256 \
--passphrase-file ~/.openclaw/.backup-passphrase \
"${BACKUP_DIR}/${BACKUP_NAME}.tgz"
rm "${BACKUP_DIR}/${BACKUP_NAME}.tgz"
log "Backup encrypted: ${BACKUP_NAME}.tgz.gpg"
else
log "Backup created (unencrypted): ${BACKUP_NAME}.tgz"
fi
# 7일 이상 된 백업 삭제
find "$BACKUP_DIR" -name "backup-*.tgz*" -mtime +7 -delete 2>/dev/null || true
log "=== Backup Complete ==="
return 0
}
# Run main function
main
MAIN_EXIT_CODE=$?
# ============================================
# Self-Review (V5.0.1)
# ============================================
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
# Non-AI cron (no OpenClaw API calls) → tokens=0
INPUT_TOKENS=0
OUTPUT_TOKENS=0
# Determine status
if [ $MAIN_EXIT_CODE -eq 0 ]; then
STATUS="ok"
WHAT_WENT_WRONG="없음"
WHY="백업 성공"
NEXT_ACTION="없음"
else
STATUS="fail"
WHAT_WENT_WRONG="백업 실패 (exit code: $MAIN_EXIT_CODE)"
WHY="스크립트 에러"
NEXT_ACTION="로그 확인: $LOG_FILE"
fi
# Log self-review
sr_log_review \
"Daily Backup" \
"$DURATION" \
"$INPUT_TOKENS" \
"$OUTPUT_TOKENS" \
"$STATUS" \
"$WHAT_WENT_WRONG" \
"$WHY" \
"$NEXT_ACTION"
exit $MAIN_EXIT_CODE