Files
AWatch-rus/docs/wiki/Server-Infrastructure.md
T

4.1 KiB

Server Infrastructure

2.2 Local state retention

Коммит cc9e4a0 добавил отдельный server-side maintenance path для контроля роста локального state на AW server.

aw-prune-local-state.sh

Команда aw-server/aw-prune-local-state.sh устанавливается в:

/usr/local/bin/aw-prune-local-state.sh

Сейчас это Rust-first wrapper. Если доступен /usr/local/bin/aw-prune-local-state-rust, wrapper использует его; иначе fallback идет на legacy shell script из /opt/activitywatch/aw-rus-ops/aw-prune-local-state.sh.

Назначение:

  • чистит старые backup-файлы в {{ aw_server_data_dir }}/backups;
  • отдельно удерживает последние DB backups и JSON backups;
  • удаляет временные архивы из /tmp: activitywatch-*.zip, hayabusa-*.zip, aw-hayabusa-profiles.txt;
  • удаляет временные WebUI/worktime artifacts старше одного дня: aw-worktime-ui-bridge.py, views-default.json, apply_webui_ru_patch.out.
  • чистит старые browser-smoke run-директории в {{ aw_server_data_dir }}/browser-smoke, удерживая последние запуски.

Rust binary по умолчанию работает в dry-run режиме. Production wrapper без аргументов запускает его с --apply, чтобы сохранить поведение systemd timer.

Safety policy:

  • не удалять основную ActivityWatch SQLite DB;
  • не удалять rollback-critical backups: switch-backups, before-rust, rollback;
  • не удалять корневые state-каталоги;
  • удалять только пути из явного allowlist: backups, backups/db, browser-smoke, ограниченный набор временных файлов в /tmp.

systemd unit и timer

Ansible создает:

/etc/systemd/system/aw-prune-local-state.service
/etc/systemd/system/aw-prune-local-state.timer

Timer:

[Timer]
OnCalendar=*-*-* 04:40:00
Persistent=true

То есть очистка запускается ежедневно в 04:40; если хост был выключен, Persistent=true догонит пропущенный запуск.

Retention-параметры

Параметры задаются в ansible/group_vars/aw_server.yml:

Переменная Значение по умолчанию Назначение
aw_server_backup_retention_days 7 Возраст backup-файлов, после которого они могут быть удалены.
aw_server_backup_keep_last_db 2 Минимум последних DB backup'ов, которые всегда сохраняются.
aw_server_backup_keep_last_json 2 Минимум последних JSON backup'ов, которые всегда сохраняются.
aw_server_journal_system_max_use 100M Лимит persistent journald storage.
aw_server_journal_runtime_max_use 50M Лимит runtime journald storage.
aw_server_journal_system_keep_free 500M Минимально свободное место, которое journald должен оставить на FS.

journald retention

deploy_aw_server.yml устанавливает drop-in:

/etc/systemd/journald.conf.d/aw-rus-retention.conf

Содержимое управляется Ansible:

[Journal]
SystemMaxUse={{ aw_server_journal_system_max_use }}
RuntimeMaxUse={{ aw_server_journal_runtime_max_use }}
SystemKeepFree={{ aw_server_journal_system_keep_free }}

После изменения drop-in playbook перезапускает systemd-journald и выполняет journalctl --vacuum-size={{ aw_server_journal_system_max_use }}. Это ограничивает рост логов без ручной очистки и снижает риск заполнения rootfs на AW server.