refactor(vps-xray): 完整部署改用 configure_restart_timer
harden_system 与 start_service 里的旧 DAILY_RESTART 分支删除, save_env 改写三个新字段。
This commit is contained in:
+27
-53
@@ -227,12 +227,26 @@ remove_restart_units() {
|
||||
return 0
|
||||
}
|
||||
|
||||
resolve_restart_config || exit 1
|
||||
# 依据 RESTART_EVERY_DAYS / RESTART_TIME / RESTART_TZ 建立或移除定时重启,
|
||||
# 并完成 daemon-reload 与 enable/disable。完整部署与 --restart 共用。
|
||||
configure_restart_timer() {
|
||||
if [ "$RESTART_EVERY_DAYS" -eq 0 ]; then
|
||||
if remove_restart_units; then
|
||||
warn "已移除定时重启(XRAY_RESTART_EVERY_DAYS=0)"
|
||||
fi
|
||||
systemctl daemon-reload
|
||||
log "定时重启: 关闭(崩溃恢复已由 Restart=always 秒级覆盖)"
|
||||
return
|
||||
fi
|
||||
|
||||
# 过渡兼容:harden_system / start_service / save_env 仍引用 DAILY_RESTART,
|
||||
# 要到「接线进完整部署流程」那个任务才会清理。在那之前必须保证
|
||||
# master 上的脚本可以完整跑完——set -u 下缺这个变量会中途崩溃。
|
||||
DAILY_RESTART=$([ "$RESTART_EVERY_DAYS" -ne 0 ] && echo 1 || echo 0)
|
||||
render_restart_units "$RESTART_EVERY_DAYS" "$RESTART_TIME" "$RESTART_TZ"
|
||||
systemctl daemon-reload
|
||||
systemctl enable --now xray-restart.timer >/dev/null 2>&1
|
||||
log "定时重启: 每 ${RESTART_EVERY_DAYS} 天 ${RESTART_TIME} (${RESTART_TZ})"
|
||||
warn "重启会切断所有活动连接;崩溃恢复本已由 Restart=always 覆盖,按需启用"
|
||||
}
|
||||
|
||||
resolve_restart_config || exit 1
|
||||
|
||||
XRAY_PORT="${XRAY_PORT:-443}"
|
||||
|
||||
@@ -844,47 +858,7 @@ Restart=always
|
||||
RestartSec=3
|
||||
EOF
|
||||
|
||||
# ===== 每日重启 timer:默认关闭 =====
|
||||
# 崩溃恢复已由上面的 Restart=always + RestartSec=3 覆盖(秒级响应),
|
||||
# 而每日硬重启会切断全部活动连接(跨夜下载、备份、CI 都会中断),
|
||||
# 属于为假想问题付出真实代价。仅在确实观察到长期运行后性能退化时才开启。
|
||||
if [ "$DAILY_RESTART" -ne 1 ]; then
|
||||
if [ -f /etc/systemd/system/xray-restart.timer ]; then
|
||||
systemctl disable --now xray-restart.timer 2>/dev/null || true
|
||||
rm -f /etc/systemd/system/xray-restart.timer \
|
||||
/etc/systemd/system/xray-restart.service
|
||||
warn "已移除旧部署遗留的每日重启 timer"
|
||||
warn "如需保留,请在 .env 中设置 XRAY_DAILY_RESTART=true 后重新部署"
|
||||
fi
|
||||
log "每日自动重启: 关闭(崩溃由 Restart=always 秒级恢复)"
|
||||
return
|
||||
fi
|
||||
|
||||
# 定时重启 timer(每日凌晨 4 点)
|
||||
cat > /etc/systemd/system/xray-restart.service << 'EOF'
|
||||
[Unit]
|
||||
Description=Daily restart of Xray
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/bin/systemctl restart xray
|
||||
EOF
|
||||
|
||||
cat > /etc/systemd/system/xray-restart.timer << 'EOF'
|
||||
[Unit]
|
||||
Description=Daily restart Xray at 04:00 CST
|
||||
|
||||
[Timer]
|
||||
OnCalendar=*-*-* 04:00:00
|
||||
TimeZone=Asia/Shanghai
|
||||
Persistent=true
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
EOF
|
||||
warn "每日自动重启: 已启用(04:00 Asia/Shanghai)"
|
||||
warn "该操作会切断所有活动连接,如无必要建议设 XRAY_DAILY_RESTART=false"
|
||||
configure_restart_timer
|
||||
}
|
||||
|
||||
# ===== 7. 启动服务 =====
|
||||
@@ -892,9 +866,6 @@ start_service() {
|
||||
systemctl daemon-reload
|
||||
systemctl restart xray
|
||||
systemctl enable xray
|
||||
if [ "$DAILY_RESTART" -eq 1 ]; then
|
||||
systemctl enable --now xray-restart.timer
|
||||
fi
|
||||
|
||||
sleep 2
|
||||
if systemctl is-active --quiet xray; then
|
||||
@@ -919,10 +890,13 @@ XRAY_UUID=${XRAY_UUID}
|
||||
# NAT / 端口转发的机器请填写服务商给你的实际入站 IP
|
||||
SERVER_IP=${SERVER_IP:-}
|
||||
|
||||
# 每日 04:00 自动重启 Xray。默认 false。
|
||||
# 崩溃恢复已由 systemd 的 Restart=always 覆盖(秒级),而每日硬重启会
|
||||
# 切断全部活动连接。仅在确实观察到长期运行后性能退化时才改为 true。
|
||||
XRAY_DAILY_RESTART=$([ "$DAILY_RESTART" -eq 1 ] && echo true || echo false)
|
||||
# 定时重启。0 = 关闭(默认);N = 每 N 天在 XRAY_RESTART_TIME 重启一次。
|
||||
# 崩溃恢复已由 systemd 的 Restart=always 覆盖(秒级),而硬重启会切断
|
||||
# 全部活动连接。仅在确实观察到长期运行后性能退化时才启用。
|
||||
# 改这两项无需完整重新部署: bash deploy.sh --restart 7 04:00
|
||||
XRAY_RESTART_EVERY_DAYS=${RESTART_EVERY_DAYS}
|
||||
XRAY_RESTART_TIME=${RESTART_TIME}
|
||||
XRAY_RESTART_TIMEZONE=${RESTART_TZ}
|
||||
EOF
|
||||
|
||||
if [ "$MODE" = "reality" ]; then
|
||||
|
||||
Reference in New Issue
Block a user