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
5.9 KiB
5.9 KiB
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.
Схема работы
- Блокировка — создаётся lock-файл
/tmp/roko-backup.lockдля предотвращения параллельных запусков. - Сбор — файлы копируются во временную staging-директорию с учётом исключений.
- Архивация — staging упаковывается в
roko-YYYYMMDD-HHMMSS.tar.gzв~/backups/. - Загрузка — архив загружается в
yabackup:for-backup/roko/через rclone (3 попытки с backoff). - Верификация — проверяется наличие архива в облаке через
rclone ls. - Очистка — удаляются старые локальные (>3) и облачные (>14) бэкапы.
- Отчёт — пишется JSON-отчёт в
~/.openclaw/workspace/roko-backup-report.json. - Разблокировка — 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— время бэкапаstatus—success,error,dry-runname— имя архива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.jsonlcache/*.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