Files
roko-backup-script/README.md
T
Roko a88b2604a1 Initial: Roko Backup Script v2 — Python rewrite with streaming progress & log rotation
Current deployed version (roko-backup.py) after refactoring from bash to Python.
Generated via OpenCode (kimi-k2.7-code). Includes:
- rclone streaming progress (log every 5% or 30s)
- RotatingFileHandler (max 1MB, 5 backups)
- LockFile for concurrent run prevention
- Yandex Cloud upload with NO_PROXY bypass
- Also includes comparison versions from mimo-v2.5-pro and kimi-k2.7-code
2026-07-07 11:27:02 +07:00

5.9 KiB
Raw Blame History

Roko Backup Script

Скрипт для автоматического резервного копирования данных OpenClaw в Yandex Object Storage.

Назначение

Автоматизированный бэкап рабочих файлов, конфигурации, медиа и баз данных OpenClaw с загрузкой в облако (Yandex Object Storage через rclone). Включает верификацию, ротацию старых бэкапов и формирование отчётов.

Архитектура

Скрипт построен по принципу конвейера (pipeline) с разделением на классы:

  • Config — конфигурация: пути, лимиты, настройки. Загружается из env-переменных или JSON-файла.
  • LockFile — предотвращает параллельный запуск через PID-файл.
  • Collector — собирает файлы для бэкапа в staging-директорию с учётом исключений.
  • Archiver — создаёт tar.gz-архив из staging-директории.
  • Uploader — загружает архив в облако через rclone с retry-логикой (10s, 30s, 60s).
  • Verifier — проверяет наличие архива в облаке.
  • Cleaner — удаляет старые локальные и облачные бэкапы сверх лимита.
  • Reporter — пишет JSON-отчёт о результате.
  • BackupPipeline — оркестрирует все шаги: collect → archive → upload → verify → clean → report.

Схема работы

  1. Блокировка — создаётся lock-файл /tmp/roko-backup.lock для предотвращения параллельных запусков.
  2. Сбор — файлы копируются во временную staging-директорию с учётом исключений.
  3. Архивация — staging упаковывается в roko-YYYYMMDD-HHMMSS.tar.gz в ~/backups/.
  4. Загрузка — архив загружается в yabackup:for-backup/roko/ через rclone (3 попытки с backoff).
  5. Верификация — проверяется наличие архива в облаке через rclone ls.
  6. Очистка — удаляются старые локальные (>3) и облачные (>14) бэкапы.
  7. Отчёт — пишется JSON-отчёт в ~/.openclaw/workspace/roko-backup-report.json.
  8. Разблокировка — lock-файл удаляется.

Запуск

Вручную

python3 ~/.openclaw/scripts/roko-backup.py

Из cron (ежедневно в 3:00)

crontab -e

Добавить строку:

0 3 * * * /usr/bin/python3 /home/openclaw/.openclaw/scripts/roko-backup.py >> /home/openclaw/backups/roko-backup.log 2>&1

Dry-run (проверить что будет бэкапиться)

python3 ~/.openclaw/scripts/roko-backup.py --dry-run

Аргументы командной строки

  • --config PATH — путь к JSON-файлу конфигурации (по умолчанию: env-переменные или built-in defaults).
  • --dry-run — только собрать файлы, показать что будет бэкапиться, без архивации и загрузки.
  • --verbose — подробный лог (DEBUG уровень вместо INFO).

Логи и отчёты

  • Логи — выводятся в stdout (перенаправляйте в файл при запуске из cron).
  • Отчёт — JSON-файл ~/.openclaw/workspace/roko-backup-report.json с полями:
    • timestamp — время бэкапа
    • statussuccess, error, dry-run
    • name — имя архива
    • size_bytes — размер в байтах
    • error — сообщение об ошибке (если есть)

Что бэкапится

  • ~/.openclaw/workspace/ — рабочая директория
  • ~/.openclaw/openclaw.json — конфигурация
  • ~/.openclaw/scripts/ — скрипты
  • ~/.openclaw/media/ — медиа-файлы
  • ~/.openclaw/plugin-skills/ — навыки плагинов
  • ~/.openclaw/agents/main/agent/openclaw-agent.sqlite — база данных агента

Исключения

  • node_modules/
  • __pycache__/
  • *.pyc
  • .git/
  • roko-pulse.jsonl
  • cache/
  • *.tmp
  • .cache/

Проксирование (NO_PROXY)

Для работы с Yandex Object Storage используется переменная окружения:

NO_PROXY="storage.yandexcloud.net,yandexcloud.net"

Это гарантирует, что запросы к storage.yandexcloud.net и yandexcloud.net идут напрямую, минуя HTTP-прокси (если он настроен в системе). Применяется автоматически во всех вызовах rclone (upload, verify, clean).

Конфигурация через env-переменные

  • ROKO_REPORT_FILE — путь к файлу отчёта (по умолчанию: ~/.openclaw/workspace/roko-backup-report.json)
  • ROKO_ARCHIVE_DIR — директория для локальных архивов (по умолчанию: ~/backups)
  • ROKO_RCLONE_REMOTE — rclone remote (по умолчанию: yabackup:for-backup/roko)
  • ROKO_MAX_CLOUD — макс. облачных бэкапов (по умолчанию: 14)
  • ROKO_MAX_LOCAL — макс. локальных бэкапов (по умолчанию: 3)

Требования

  • Python 3.10+
  • rclone (должен быть в PATH)
  • Настроенный rclone remote yabackup для Yandex Object Storage