使用响应文件显示Oracle DB无提示安装中的进度

我正在运行一个脚本来安装带有无提示选项和响应文件的Oracle DB 11g。

执行命令后,我注意到了shell

$ /directory_path/runInstaller -silent -responseFile responsefilename 

安装会话刚刚closures,只是给我一个日志文件的位置。

安装过程在后台处于活动状态。 但对我来说,没有办法不知道进展和发生了什么……直到运行根脚本的提示来了。 如果我closures腻子窗户怎么办?

任何方式来保持安装程序会话活动,直到完成? 并在屏幕上显示某种进展?

任何方式来保持安装程序会话活动,直到完成?

是的,你可以等待oracle静默安装在linux上完成,例如在shell脚本中如下。

(以下是针对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] ) 

…我们还可以知道安装是否成功,因为通用安装程序始终通过两行将其退出状态放入日志中:

 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 

…只有oracle安装成功完成,上面的“脚本”才会以0的状态退出。

(请注意,包含上面expr捕获的状态空间是故意的,因为如果匹配的子字符串字面意思是“0”,奇怪的是expr以状态1退出)

令人惊讶的是,oracle会在linux / unix上为通用安装程序“背景化”这么麻烦,因为:

  • 客户通常在后台运行一个脚本是微不足道的:

    runInstaller xyz&…或… setsid runInstaller xyz

  • 这是非常困难的(正如我们上面看到的)等待一个“埋藏”的后台过程完成,而且不能一般地完成

通过从runInstaller / .oui同步运行通用安装程序,Oracle可以节省自己和其他人的大量工作。

自从我做了一个安装工作​​已经有一段时间了,但我认为你不能把它留在前台, 它只是启动JVM,并没有(AFAIK)产生任何控制台输出,直到最后,你看,无论如何,所以它不会帮你很多。

您应该有足够的空间来查看oraInventory目录下的logs目录,该目录在您为安装创建的oraInst.loc文件中标识,或者已经在命令行中指定。 你提到它告诉你日志文件是在什么时候开始的,所以这似乎是一个很好的开始。 该目录中的installActions日志会给你比你想要的更多的细节。

如果关闭终端, silentInstalloraInstall日志会告诉你什么时候需要运行root脚本,而后者甚至会以百分比的形式给你提供进度 – 尽管我不确定这是多么可靠。

拖尾oraInstallinstallActions文件可能是您在屏幕上显示某种进度的唯一方法。 我想,“无声”是双向的。

您可能想要“/尾”/ tmp / OraInstallXXX目录下生成的最新日志(ls -t会给出该日志)。

我发现的一个有用的选项是-waitforcompletion-nowait为Windows的方法。 setup.exe将等待完成,而不是产生java引擎并退出。

但仍然试图找出一种方法来运行runInstaller时自动停止该日志文件。

更新:最后,这是唯一的解决方案,为我工作。

 LOGFILE=$(echo /path/oraInventory/logs/$(ls -t /path/oraInventory/logs | head -n 1)) ./runInstaller -silent -responseFile /path/db.rsp -ignorePrereq grep -q 'INFO: Shutdown Oracle Database' $LOGFILE while [[ $? -ne 0 ]] ; do tail -1 $LOGFILE grep -q 'INFO: Shutdown Oracle Database' $LOGFILE done 

而不是尾随oraInventory中的最新日志,保持进程活动,直到最后一条消息被写入日志文件。 旧学校,但工作。