我正在尝试为我遇到的问题想出一个解决方案。
我有一台运行 sftp 的服务器。
我有时需要重新启动这台计算机以进行更新和其他维护,但我不想等到它不活动的那一刻才运行重新启动命令。我希望能够要求服务器重新启动并等待其最后一个 ssh 连接处于活动状态(如果它可以拒绝新连接,那将是一个优点,但不是必需的)。
我是否可以进行配置systemd
,ssh
以便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 地址或主机名。 who
、w
和wc
是 Linux 中的常用命令,您很可能可以使用。
您可以使用这些命令中的任何一个来:
- 创建一个自定义关闭命令放置在
/usr/sbin
- 创建自定义
systemd
关闭例程