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-smokerun-директории в{{ 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.