私は私が経験している問題に対する解決策を見つけようとしています。
SFTPを実行しているサーバーがあります。
場合によっては、更新やその他のメンテナンスのためにこのコンピュータを再起動する必要がありますが、再起動コマンドを実行するためにコンピュータが無効になるのを待ちたくありません。サーバーに再起動し、最後のSSH接続がアクティブになるのを待つように要求したいと思います(新しい接続を拒否できれば良いですが、必須ではありません)。サーバーへのアクティブ接続の実行中に再起動プロセスが一時停止するように
設定できますか?これは、少なくともアクティブなSSHセッションが停止するまで(マシンを再起動できる時点)、マウントポイント、ネットワーク、およびSSHデーモンを実行し続ける必要があることを意味します。私はsshdまたはsystemd構成を使用するソリューションを探しています。ソリューションがカスタムスクリプトであれば、それを処理しますが、統合ソリューションが欲しいです。systemd
ssh
sshd
答え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
カスタム出口ルーチンの作成