2

サイレント オプションと応答ファイルを使用して Oracle DB 11g をインストールするスクリプトを実行しています。

コマンドを実行した後にシェルに気づきました

$ /directory_path/runInstaller -silent -responseFile responsefilename

インストール セッションが終了し、ログ ファイルの場所が表示されます。

インストール プロセスはバックグラウンドでアクティブです。しかし、ルートスクリプトを実行するプロンプトが表示されるまで、進行状況と何が起こっているのかについては、私にはどうしようもありません。パテの窓などを閉めたら?

インストーラー セッションを終了するまでアクティブにしておく方法はありますか? 画面に何らかの進行状況を表示しますか?

4

4 に答える 4

5

インストーラー セッションを終了するまでアクティブにしておく方法はありますか?

はい、次のようにシェル スクリプトなどを使用して、Linux で oracle のサイレント インストールが完了するのを待つことができます。

(以下は、Redhat Enterprise Linux の oracle 11g リリース 2 の場合です。)

次のようにして、終了するのを待つことができます。

$ /directory_path/runInstaller -silent -responseFile responsefilename | 
while read l ; 
do 
  echo "$l" ; 
done

(これは、Java ユニバーサル インストーラーがバックグラウンドで実行されていても stdout を使用し続けるという事実に依存しているため、バックグラウンドのユニバーサル インストーラー プロセスが終了するまで "read l" は成功し続けます)

画面に何らかの進行状況を表示しますか?

もう少しトリッキーですが、終了する前に runInstaller の出力からログファイルの名前を見つけ出すことでそれを行うことができます。出力には次のような行が含まれます。

Preparing to launch Oracle Universal Installer from /tmp/xxxxOraInstallTTT. ...

... ここで、TTT はタイムスタンプであり、正しいログ ファイル /opt/oraInventory/logs/installActionsTTT.log につながります。

次のようなもの(インストールでは進行状況の出力が必要ないため、これはテストしていません):

$ /directory_path/runInstaller -silent -responseFile responsefilename | 
(
while read l ; 
do 
  echo "$l" &&
  if expr "$l" : "Preparing to launch Oracle Universal Installer from " >/dev/null
  then
    t=$(expr "$1" : ".*OraInstall\([^.]*\)") &&
    log="/opt/oraInventory/logs/installActions${t}.log" &&
    tail -f "$log" &
    tpid=$!
  fi
done
if [ -n "$tpid" ]
then
  kill $tpid
fi
#[1]
)

... インストールが成功したかどうかもわかります。これは、ユニバーサル インストーラーが常に次の 2 行を介して終了ステータスをログに記録するためです。

INFO: Exit Status is 0
INFO: Shutdown Oracle Database 11g Release 2 Installer

... したがって、上記の #[1] に追加すると ...

exitStatus=$(expr $(grep -B1 "$log" | head -1) : "INFO: Exit Status is\(.*\)") &&
exit $exitStatus

... 上記の「スクリプト」は、オラクルのインストールが正常に完了した場合にのみ、ステータス 0 で終了します。

(一致した部分文字列が文字どおり「0」の場合、奇妙なことに expr はステータス 1 で終了するため、上記の expr によってキャプチャされたステータスにスペースを含めるのは意図的なものであることに注意してください)

オラクルがLinux/Unixでユニバーサルインストーラを「バックグラウンド」にするのに非常に苦労するのは驚くべきことです。理由は次のとおりです。

  • 顧客がバックグラウンドで一般的にスクリプトを実行することは簡単です。

    runInstaller xyz & ... または... setsid runInstaller xyz

  • 「埋められた」バックグラウンドプロセスが終了するのを待つことは非常に困難であり(上記でわかるように)、一般的に行うことはできません

オラクルは、runInstaller/.oui からユニバーサル インストーラを同期的に実行するだけで、自分自身と他の全員の多大な労力を節約できたはずです。

于 2013-07-25T05:53:49.447 に答える
0

インストールを行ってからしばらく経ちましたが、フォアグラウンドにとどめておくことはできないと思います。JVMを起動するだけで、(AFAIK)最後までコンソール出力を生成しません。とにかくそれを見るので、あまり役に立ちません。

ただし、インストール用に作成したファイルまたは既に持っているファイルで識別され、コマンドラインで指定されている可能性がある、logsディレクトリの下のディレクトリには、見るべきものがたくさんあるはずです。開始時のログ ファイルの場所を教えてくれたとおっしゃいました。そのディレクトリのログには、おそらく必要以上の詳細が表示されます。oraInventoryoraInst.locinstallActions

ターミナルを閉じると、スクリプトを実行する必要がある時期がログsilentInstalloraInstallログrootに表示され、後者は進行状況をパーセンテージで示しますが、それがどれほど信頼できるかはわかりません.

oraInstallまたはファイルを追跡するinstallActionsことは、画面上である種の進行状況を表示できる唯一の方法です。「サイレント」は両方の方法で機能すると思います。

于 2013-07-04T18:13:22.403 に答える
0

おそらく、/tmp/OraInstallXXX ディレクトリの下に生成された最新のログ (ls -t で取得できます) を「追跡」する必要があります。

于 2013-07-11T07:58:09.870 に答える