Commit Graph
15 Commits
Author SHA1 Message Date
joywayer 3fd2c89020 fix(vps-xray): 修复定时重启的四类静默失效并补齐安全不变式测试
Critical-1 timer 时区:[Timer] 段没有 TimeZone= 这个 key,systemd 只会记一条
"Unknown key name" 然后按系统本地时区解析 OnCalendar。VPS 出厂多为 UTC,
用户设「04:00 Asia/Shanghai」会在北京时间 12:00 触发且毫无提示。
改为把时区写进日历表达式本身:OnCalendar=*-*-* HH:MM:00 <TZ>(systemd >= 242)。

Critical-2 前导零:^[0-9]+$ 放行 08/09/010,该值原样写进 guard 的 DAYS=,
而 guard 里是算术展开——010 被当八进制解析成 8 天,08/09 直接报
"value too great for base",使间隔判断求值为假,落进重启分支变成每天重启。
校验通过后统一 $((10#$days)) 归一化。

Important-3 状态文件写入失败:mkdir 与写时间戳都不检查返回值,/var 写满或
只读时写入失败却照样重启,「先写时间戳」的保护完全失效,退化成每天硬重启且
无限持续。改为 fail-safe:写不进去就报错并跳过本轮。
update_env_field 的三处写入同样补上返回值检查,调用方改在条件位置。

Important-4 未来时间戳:RTC 错乱或 NTP 大幅向后校正时会写下未来的时间戳,
时钟校回后 now-last 恒为负,此后永远跳过且无自愈路径。与「内容非法按 0 处理」
同策略,读到 last > now 时按 0 处理。

Important-5 静默中止:configure_restart_timer 被 harden_system、main 一路裸调用,
set -e 下 systemctl enable 失败会让部署在「8/8 加固」之后无声退出——
start_service / save_env / print_result 全不执行,config.json 已换、防火墙已改,
但 xray 没重启、.env 没更新、链接没打印。三处 systemctl 全部改到条件位置,
enable 不再吞 stderr(规格本就要求靠 systemctl 报错暴露非法时区)。

Important-6 NEXT 语义:list-timers 的 NEXT 是 timer 的「下次唤醒」,每天一次,
不是下次重启时间。新增 print_next_restart,--restart 输出里直接算出并显示
「下次实际重启时间」,README 同步说明差异。

Important-7 安全不变式测试:configure_restart_timer 与 apply_restart_only 原本
零覆盖,「不重启 xray、不碰 vless 链接」这个最重要的承诺恰恰没有回归保护。
补上启用/关闭两个方向的断言,以及 .env 逐字段 diff 与 systemctl 调用日志断言。

Minor-9 README 补充取舍:完整部署的 systemctl restart xray 不更新状态文件。
Minor-11 save_env 注释「这两项」→「这几项」。

测试 61 → 101 项,全部通过。
2026-08-07 09:37:46 +08:00
joywayer 9f1e293d4c feat(vps-xray): 新增 --restart 轻量入口
只改定时重启计划并立即生效,不重装 Xray、不重写配置、不重启服务,
与 --mode/--show/--redetect 互斥。
顺带修正非法参数以退出码 0 结束的问题。
2026-08-06 17:02:15 +08:00
joywayer 682b79852d refactor(vps-xray): 完整部署改用 configure_restart_timer
harden_system 与 start_service 里的旧 DAILY_RESTART 分支删除,
save_env 改写三个新字段。
2026-08-06 16:49:57 +08:00
joywayer d19d337bf2 feat(vps-xray): 生成 timer/service/guard 三个单元文件
timer 每天唤醒,N 天间隔判断交给 guard 脚本,
绕开 OnCalendar 无法表达任意 N 天间隔的限制。
2026-08-06 16:15:03 +08:00
joywayer dfcaf7e4d0 fix(vps-xray): update_env_field 追加时处理缺尾换行的文件,防止字段黏连 2026-08-06 16:08:42 +08:00
joywayer 39b0aee2c9 feat(vps-xray): 新增 update_env_field 就地更新 .env 单个字段 2026-08-06 16:02:22 +08:00
joywayer 920774d7d7 fix(vps-xray): 添加过渡兼容赋值 DAILY_RESTART
harden_system / start_service / save_env 仍引用 DAILY_RESTART,
下游清理要到后续任务进行。本任务在 resolve_restart_config 之后
添加兼容赋值,确保 set -u 下脚本完整可运行。
2026-08-06 15:57:07 +08:00
joywayer 29236e8e1c feat(vps-xray): 重启计划配置解析与旧字段迁移
新增 normalize_restart_time / resolve_restart_config,
XRAY_RESTART_EVERY_DAYS 缺失时才回退读 XRAY_DAILY_RESTART。
附单元测试,不需要 root 与 systemd。
2026-08-06 15:48:43 +08:00
joywayer 938df26cbb www.apple.com 为伪装地址,前端警告消失 2026-08-06 13:02:46 +08:00
joywayer 5195986fc4 vps部署优化 2026-08-05 17:12:18 +08:00
joywayer 2afc2cade6 优化部署,增加lisa dmit 2026-08-05 09:51:12 +08:00
joywayer 353d3940a9 添加clash yaml 2026-06-24 20:29:06 +08:00
joywayer 80ba4b046c 优化vps部署 2026-06-24 18:33:11 +08:00
joywayer 97c6b99b58 增加重启机制 2026-04-24 14:25:18 +08:00
joywayer 18949f31ba 增加vps-xray部署相关脚本 2026-04-08 15:19:49 +08:00