私の問題は、私たちがサーバーに接続してスクリプトを実行することです。これにより、sshd用1個、bash用1個、合計2個のPIDが生成されます。時には、スクリプトによって生成された接続スケジュールがまだ存在することがあります。
sshd接続が切断されたら、自動的に信号をキャプチャし、不要なエントリを削除するようにリモート側でクリーンアップを実行しようとしています。サーバーから終了信号などを捕捉しているがSSH削除を捕捉できないようです。
SSHD 接続が切断された場合は、処理に接続が必要なので、続行する必要はありません。
私たちは2つのスクリプトを実行しようとしています。 1 つはサーバーに接続し、もう 1 つは操作を実行します。
ランチャー
#!/bin/bash
#confirm arguments sent to server [args]
echo "You provided the arguments:" "$@"
#create ssh connection to remote server [args]
ssh -t "$1" 'trap : INT; bash -s' < monitor.sh "$2"
trap dockertermlocal EXIT
dockertermlocal()
{
echo "Caught termination signal from local!"
send clean up to remote server
echo "stopped docker from local"
exit 1
}
#Confirmation
echo "ran to completion"
離れて
#Command passed to script
echo "You provided the arguments:" "$@"
# Run docker command
eval "$@"
echo "ran command"
coproc ssh "$1" 'command & read; kill $!'
ベストアンサー1
他の信号についてはわかりませんが、ローカルシステムに戻るトラフィックがある場合は、そこからPIPE信号をキャプチャできます。接続が切断されるとパイプが閉じるため、スクリプトは書き込みを試みるとPIPE信号を受け取ります。多くの通信がない場合は、文字(ポイントなど)を毎秒(または必要に応じて)起動コンピュータに再送信するバックグラウンドタスクを設定できます。これにより、やや即時のアクションが実行されます。 。