インストーラー セッションを終了するまでアクティブにしておく方法はありますか?
はい、次のようにシェル スクリプトなどを使用して、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 からユニバーサル インストーラを同期的に実行するだけで、自分自身と他の全員の多大な労力を節約できたはずです。