# Эксплуатация ## Ротация URI ```bash sudo vpn-egressctl import --stdin ``` Либо из защищённого файла режима 0600: ```bash sudo vpn-egressctl import --file /run/credentials/new-hysteria2.uri ``` Production URI HY2XS должен использовать Gecko. Не передавать URI через argv, environment, shell history, тикет или журнал. ## Изменение policy ```bash install -m 0600 new-policy.json /etc/vpn-egress/policy.json vpn-egressctl check vpn-egressctl diff vpn-egressctl sync ``` Path unit следит только за URI; policy применяется явным `sync`. ## State и rollback ```bash vpn-egressctl status --json vpn-egressctl rollback ``` Rollback относится только к конфигам, успешно управлявшимся этой же версией 0.2.0 с sing-box 1.14.0. `last-good.meta.json` обязан совпадать по controller version, engine version и SHA-256. Legacy backup отклоняется. Первое clean apply не имеет предыдущего конфига и не создаёт `last-good`. Последующие успешные изменения сохраняют backup. Ручной rollback меняет current и last-good местами, поэтому повторная команда возвращает предыдущий current. После rollback desired URI не меняется; `doctor` показывает config drift. До следующего `sync` нужно исправить URI либо осознанно вернуть desired state. ## Watcher `PathChanged` запускает `vpn-egress-sync.service`. Все операции сериализованы lock-файлом. Некорректный URI не меняет production config. ```bash journalctl -u vpn-egress-sync.service -n 100 --no-pager systemctl reset-failed vpn-egress-sync.service ``` ## Обновления package/engine 0.2.0 не объявляет совместимость с другими версиями приложения или sing-box. Любой следующий переход выполняется по отдельному release runbook как clean install. `apt upgrade` не считается допустимой процедурой обновления этого control plane.