仅当没有 ssh 会话处于活动状态时才重新启动

仅当没有 ssh 会话处于活动状态时才重新启动

我正在尝试为我遇到的问题想出一个解决方案。
我有一台运行 sftp 的服务器。
我有时需要重新启动这台计算机以进行更新和其他维护,但我不想等到它不活动的那一刻才运行重新启动命令。我希望能够要求服务器重新启动并等待其最后一个 ssh 连接处于活动状态(如果它可以拒绝新连接,那将是一个优点,但不是必需的)。
我是否可以进行配置systemdssh以便sshd只要有活动连接运行到服务器,就会暂停重新启动过程。
这意味着至少要保持我的挂载点、网络和 ssh 守护进程运行,直到活动的 ssh 会话停止,此时机器可以重新启动。
我正在寻找使用 sshd 或 systemd 配置的解决方案。
如果解决方案是自定义脚本,我会处理该问题,但我希望有一个集成的解决方案。

答案1

who 可以通过 SSH 连接到服务器,查看是否有人使用命令或命令登录w

if [[ -z $(ssh SERVERHOST-IP 'w -oh') ]]; then echo "No User Logged in"; else echo "User Connected"; fi

这将检查命令是否w -oh为空,这将检查是否有任何用户登录。

当没有更多用户登录时,您可以使用它远程重新启动服务器。

while [ $(ssh SERVERHOST-IP 'w -oh|wc -l') -gt 0 ]; do sleep 1; echo "User Connected"; done && echo "Reboot server" && ssh -t SERVERHOST-IP 'sudo shutdown -r now'
  • echo如果您愿意,可以省略这些命令。
  • 替换SERVERHOST-IP为您的实际服务器 IP 地址或主机名。
  • whowwc是 Linux 中的常用命令,您很可能可以使用。

您可以使用这些命令中的任何一个来:

  1. 创建一个自定义关闭命令放置在/usr/sbin
  2. 创建自定义systemd关闭例程

相关内容