bashスクリプトを起動したsshd接続に接続すると、そのスクリプトを終了して別のコマンドを実行できます。

bashスクリプトを起動したsshd接続に接続すると、そのスクリプトを終了して別のコマンドを実行できます。

私の問題は、私たちがサーバーに接続してスクリプトを実行することです。これにより、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信号を受け取ります。多くの通信がない場合は、文字(ポイントなど)を毎秒(または必要に応じて)起動コンピュータに再送信するバックグラウンドタスクを設定できます。これにより、やや即時のアクションが実行されます。 。

おすすめ記事