使用 dtach 进行带内 apt-get 升级

问题

我的 SSH 会话在执行带内升级时终止。

环境

  • Cumulus Linux,所有版本
  • 带内 SSH 连接:通过逻辑端口(网桥或 bond)或交换机 (swp) 端口而不是管理 eth0 端口进行升级

根本原因

涉及某些软件包的升级,例如 switchd 或 FRR/Quagga,可能会导致与交换机的带内 SSH 连接暂时丢失(通常为一两分钟)。

解决方案

当进行带内升级时,NVIDIA 建议使用 dtach 或 screen 命令运行升级。这样可以在连接中断的情况下重新连接到升级过程。

使用 dtach

cumulus@switch$ sudo apt-get update
cumulus@switch$ dtach -c /tmp/apt-get -z sudo apt-get upgrade

位置

  • /tmp/apt-get 是稍后重新连接的套接字
  • -z 禁用挂起键挂起 dtach

在重新连接到交换机后重新连接到 apt-get 进程

cumulus@switch$ dtach -a /tmp/apt-get

如果 dtach 套接字文件不存在,如以下错误所示

cumulus@switch$ dtach -a /tmp/apt-get
dtach: /tmp/apt-get: No such file or directory

则升级已完成。在重新启动(如果需要)之前,您可以查看 /var/log/apt/term.log 中的升级结果

cumulus@switch$ less /var/log/apt/term.log

使用 screen

启动一个 screen 会话,指定一个名称以便稍后重新连接

screen -S apt-get

在新的 screen 会话中,继续升级过程

cumulus@switch$ sudo apt-get update
cumulus@switch$ sudo apt-get upgrade

在 重新连接 到 交换机 后 重新连接 到 apt-get 进程

screen -r apt-get