SSH経由で実行すると、スクリプトは返されません。

SSH経由で実行すると、スクリプトは返されません。

次のようにSSHクライアントを介してスクリプトを呼び出します。

ssh root@host "su - oracle -c '~/bin/weblogic start'"

これは~/bin/weblogic実際にバックグラウンドでWebサーバーを起動し、特定のパターン(「サーバーの状態が実行中に変更されました」)が見つかるまでそのログを読み取り、表示して終了するbashスクリプトです。リモートの場所から呼び出すと、最後のbashコマンドの実行後に停止します。私はこれがSOの説明に関連していると確信しています(https://stackoverflow.com/questions/8122780/exiting-shell-script-with-Background-processes);ただし、バックグラウンドでbashスクリプトを起動できませんweblogic。完了するまで待機し、特定のモードまで通常のstdoutと終了コードを取得する必要があります。

Bashコードは次のとおりです。

   function start_server {
        ~/bin/weblogic.py
        echo 'Python script finished'
        exit 1
   }

   ....
   start_server

出力は次のとおりです

... server output ...
...
... Server state changed to RUNNING ....
Python script finished

SSHクライアントが返されるようにするにはどうすればよいですか?私はSolaris 11.3で実行しています。

答え1

exit 1エラー状態を通知します。このようなスクリプトでは、exitスクリプトを含めないでください。

この機能をお試しください。コマンドラインからstartManagedWeblogic.shmにホストとポートを提供するか、サーバーを起動する前に変数をエクスポートできます。 startManagedWebLogic.shスクリプトを読むと、私が使用した方法の代わりに出力をリダイレクトするスクリプトを実行する前にエクスポートできる変数を見つける必要があります。 Pythonスクリプトでも同じことができます。

WebLogic起動スクリプトは、サーバーが停止するまで実行されます。バックグラウンドログをファイルに出力し、サーバーを拒否する必要があります。 (サーバーを起動するには nodeManager を使用することを検討してください。) 次に、ファイルが実行されるまでファイルを追跡します。

function start_server {
    ~/bin/startManagedWeblogic.sh HOSTNAME PORT &> weblogic.out &
    disown
    ~/bin/tailUntilRunning.py weblogic.out
    echo 'Shell script finished'

}

Python(Jython 2.1)スクリプトのインタプリタとしてwlst.shを使用する必要がありますが、WLST関数を使用してサーバーを起動できます。

関連情報