dsh-vps 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/bin/dsh-vps +23 -8
  2. package/package.json +1 -1
package/bin/dsh-vps CHANGED
@@ -17,7 +17,10 @@
17
17
  # install-units 安装浏览器一键升级所需的 systemd 单元(install.sh / update-gate 调用)
18
18
  # upgrade-run 执行浏览器发起的升级请求(由 dsh-vps-upgrade.service 以 root 调用)
19
19
 
20
- set -euo pipefail
20
+ set -Eeuo pipefail
21
+ # set -e 会让脚本在任何一条命令失败时静默退出;这里把"在哪一行、哪条命令"打出来,
22
+ # 升级日志(state/upgrade.log)里就能直接看到原因,而不是戛然而止。
23
+ trap 'printf "\033[1;31m[dsh-vps]\033[0m 意外退出:第 %s 行 \`%s\` 返回 %s\n" "$LINENO" "$BASH_COMMAND" "$?" >&2' ERR
21
24
 
22
25
  ROOT="${DSHVPS_ROOT:-/opt/dsh-vps}"
23
26
  GATE_PORT="${GATE_PORT:-3100}"
@@ -54,14 +57,25 @@ cmd_backup() {
54
57
  require_root
55
58
  mkdir -p "$ROOT/backups"
56
59
  local ts="$ROOT/backups/dsh-vps-$(date +%Y%m%d-%H%M%S).tar.gz"
57
- tar -czf "$ts" -C / "${DSH_HOME_DIR#/}" "${ROOT#/}/state" 2>/dev/null \
58
- || die "备份失败"
60
+ # DSH 运行中仍在写文件:GNU tar 遇到"读取期间文件有变化"返回 1,归档本身完整,只告警;
61
+ # 返回 2 才是真失败
62
+ local rc=0
63
+ tar -czf "$ts" -C / "${DSH_HOME_DIR#/}" "${ROOT#/}/state" 2>/dev/null || rc=$?
64
+ if [[ $rc -eq 1 ]]; then
65
+ warn "部分文件在备份期间有变动(DSH 运行中属正常),备份仍可用"
66
+ elif [[ $rc -ne 0 ]]; then
67
+ die "备份失败(tar 返回 $rc)"
68
+ fi
59
69
  chmod 600 "$ts"
60
70
  log "备份完成: $ts"
61
- # 保留最近 3 份
71
+ # 保留最近 3 份。写成 if:`[[ ]] && ...` 作为函数最后一行时,条件不成立会让函数返回 1,
72
+ # 调用方在 set -e 下直接静默退出——首次升级(备份不足 4 份)就曾因此在备份后中止
62
73
  local old
63
- old=$(ls -1t "$ROOT"/backups/dsh-vps-*.tar.gz 2>/dev/null | tail -n +4)
64
- [[ -n "$old" ]] && rm -f $old && log "已清理旧备份"
74
+ old=$(ls -1t "$ROOT"/backups/dsh-vps-*.tar.gz 2>/dev/null | tail -n +4 || true)
75
+ if [[ -n "$old" ]]; then
76
+ rm -f $old
77
+ log "已清理旧备份"
78
+ fi
65
79
  }
66
80
 
67
81
  ## endregion
@@ -328,7 +342,7 @@ console.log(c.sort(cmp).pop());
328
342
 
329
343
  # 5. 清理:保留最近 2 个版本目录
330
344
  local old_dirs
331
- old_dirs=$(ls -1d "$ROOT"/dsh/*/ 2>/dev/null | grep -v current | sed 's|/$||' | sort -V | head -n -2)
345
+ old_dirs=$(ls -1d "$ROOT"/dsh/*/ 2>/dev/null | grep -v current | sed 's|/$||' | sort -V | head -n -2 || true)
332
346
  for d in $old_dirs; do
333
347
  [[ "$(basename "$d")" == "$cur" ]] && continue # 保底:至少留一个可回滚目标
334
348
  rm -rf "$d" && log "已清理旧版本目录: $d"
@@ -341,7 +355,7 @@ cmd_rollback() {
341
355
  cur=$(current_version)
342
356
  local prev
343
357
  prev=$(ls -1d "$ROOT"/dsh/*/ 2>/dev/null | grep -v current | sed 's|/$||' | xargs -n1 basename 2>/dev/null \
344
- | grep -vx "$cur" | sort -V | tail -1)
358
+ | grep -vx "$cur" | sort -V | tail -1 || true)
345
359
  [[ -n "$prev" ]] || die "没有可回滚的版本目录"
346
360
  log "回滚: $cur -> $prev"
347
361
  switch_version "$prev"
@@ -998,6 +1012,7 @@ cmd_upgrade_run() {
998
1012
  chmod 600 "$UPGRADE_LOG"
999
1013
  # 独立进程执行:写在 `|| rc=$?` 里的函数/子 shell 会让 set -e 失效,出错也不停
1000
1014
  "$ROOT/bin/dsh-vps" upgrade --latest --yes >>"$UPGRADE_LOG" 2>&1 || rc=$?
1015
+ [[ $rc -eq 0 ]] || printf '[dsh-vps] 升级进程退出码 %s(原因见上一行)\n' "$rc" >>"$UPGRADE_LOG"
1001
1016
  to=$(current_version)
1002
1017
  if [[ $rc -eq 0 ]]; then
1003
1018
  write_upgrade_status success "$from" "$to"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-vps",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "description": "Ship DeepSeek Harness to your own VPS: one command installs a zero-dependency login gateway, automatic HTTPS through Caddy, systemd supervision, and optional WireGuard-only access.",
5
5
  "keywords": [
6
6
  "deepseek-harness",