スクリプトの最後でSSH接続を強制的に終了する方法

スクリプトの最後でSSH接続を強制的に終了する方法

2つの部分から成るスクリプトがあります。パート1SSH接続を作成し、パート2スクリプトを実行します(これまで約800行を含む)。

part1:
ssh $target_server "bash -s" < $target_script

問題はパート2次の行が含まれます:

fc_START_WINE_APP () { nohup `DISPLAY=:11.0 wine "$1"` & }
. . .
fc_START_WINE_APP $applicationFull

デフォルトでは、アプリケーションが実行中であることを確認し、そうでない場合は再起動します(およびその他のいくつかの点)。

問題は、この関数がstartアプリケーションで実行されるとSSH接続が中断されることです。

SSH接続がスクリプトの終わりに達したときに強制終了する方法はありますか?

などを試してみましたexitexit 0exit 1パート2。私はssh -f前に試しましたパート1しかし、その後パート2実装されていないようです。


アップロード日: 2016-01-28

例は次のとおりです。

**SCRIPT1**
#!/bin/bash

target_server="1.2.3.4"
target_script="/home/user/script2.sh"

echo "Script 1 Started"

ssh $target_server "bash -s" < $target_script

echo "Script 1 Ended"

**SCRIPT 2**
#!/bin/bash

echo "Script 2 Started"

fc_START_WINE_APP () { nohup `DISPLAY=:11.0 wine "$1"` & }

applicationFull="/home/tech/myApp.exe"

fc_START_WINE_APP $applicationFull

echo "Script 2 Ended"

このコマンドを実行すると到着しますScript 2 Endedが、SSH接続が閉じていないため到着しませんScript 1 Ended

ご存知のように、このスクリプトのポイントは、指定されたサーバーに接続し、Wineを使用して(以前のWindows)アプリケーションを起動することです。

私の理解は、まるで自分が直接ログイン(パテを使用)して実行し、終了してから実行し続けるかのnohup . . &ようにアプリケーションが閉じられないようにするには、ssh接続が閉じられたときに起動する必要があることです。nohup myCommand &myCommmand

ベストアンサー1

プログラムを分離するときは、両方の出力をどこか(/dev/nullまたはログファイル)にリダイレクトし、次のものを使用する必要があります。

&>/dev/null &                         ...when bash --version >= 4

または

>/dev/null 2>&1 &                     ...all shells

だけでなく:

&

...これにより、sshを起動するときにstdout、stderrを心配する必要がなくなり、終了することができます。

nohupは必ずしも重要ではありません(シェル構成とプログラムのhupシグナル処理に応じて...私のテストでは、 'sleep'、 'xclock'、 'wine notepad.exe'はnohupなしで動作し続けます)。 nohupが必要な状況では、通常、screenとtmuxはより良いソリューションです。

bash> = 4と仮定すると、分離動作をテストする最小の例は次のとおりです。

ssh 1.2.3.4 "sleep 10 &"               ... exits after 10 seconds
ssh 1.2.3.4 "sleep 10 &>/dev/null &"   ... exits immediately

特定のscript1/2の場合、script2のfc_START_WINE_APP関数は次のようになります。

{ DISPLAY=:11.0 wine "$1" &>/dev/null & }

... $ 1の値の場合、"notepad.exe"はうまく機能します...しかし、何らかの理由でまだnohupが必要な場合は、1つのコマンドしか許可されていません。 。しゃっくり:

{ nohup bash -c "DISPLAY=:11.0 wine $1" &>/dev/null & }

おすすめ記事