#!/usr/bin/env bash set -euo pipefail [[ $EUID -eq 0 ]] || { echo 'Run on the service VM as root.' >&2; exit 1; } task_root=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd) task_staging=$(mktemp -d) trap 'rm -rf "$task_staging"' EXIT python3 "$task_root/scripts/fetch-rules.py" --output "$task_staging/new" mkdir -p "$task_staging/old" cp -a /var/lib/clashweb-core/rules/. "$task_staging/old/" install -m 0640 -o clashweb -g clashweb-core "$task_staging/new/"*.mrs /var/lib/clashweb-core/rules/ if ! sudo -u clashweb-mihomo /usr/local/bin/mihomo -t -d /var/lib/clashweb-core -f /var/lib/clashweb-core/config.yaml; then cp -a "$task_staging/old/." /var/lib/clashweb-core/rules/ echo 'Validation failed; previous rules restored.' >&2 exit 1 fi if ! systemctl restart clashweb-mihomo.service || ! systemctl is-active --quiet clashweb-mihomo.service; then cp -a "$task_staging/old/." /var/lib/clashweb-core/rules/ systemctl restart clashweb-mihomo.service echo 'Reload failed; previous rules restored.' >&2 exit 1 fi echo 'Rule resources updated. Select a node in the UI if needed.'