我正在运行一个脚本来安装带有静默选项和响应文件的Oracle DB 11g。
执行命令
后我注意到了shell$ /directory_path/runInstaller -silent -responseFile responsefilename
安装会话刚刚关闭,只给我一个日志文件位置。
安装过程在后台处于活动状态。但对于我来说,没有办法取消进展和发生的事情......直到运行根脚本的提示出现。如果我关闭腻子窗等怎么办?
保持安装程序会话活动直到完成的任何方法?并在屏幕上显示某种进展?
答案 0 :(得分:5)
任何方法可以使安装程序会话保持活动状态直到完成?
是的,您可以等待oracle silent install在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 x y z& ... 要么... setsid runInstaller x y z
很难(正如我们上面所见)等待“埋葬”的后台进程完成,而且一般不能这样做
只需从runInstaller / .oui同步运行通用安装程序,Oracle就可以节省自己和其他所有人的工作。
答案 1 :(得分:0)
自从我安装以来已经有一段时间了,但我认为你不能让它留在前台;它只是启动JVM而不是(AFAIK)产生任何控制台输出直到结束,无论如何你都会看到它,所以它对你没什么帮助。
但是,您应该在logs
目录下的oraInventory
目录中查看,这个目录在您为安装创建或已经创建的oraInst.loc
文件中标识,并且可能已在命令行中指定。你提到它告诉你日志文件启动时的位置,所以这似乎是一个好的开始。该目录中的installActions
日志将为您提供比您可能想要的更多详细信息。
如果您关闭终端,silentInstall
和oraInstall
日志会告诉您何时需要运行root
脚本,而后者甚至会以百分比形式提供进度 - 虽然我不确定那是多么可靠。
拖拽oraInstall
或installActions
文件可能是您在屏幕上显示某种进展的唯一方法。我想,'沉默'可以两种方式运作。
答案 2 :(得分:0)
我发现一个有用的选项是-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中拖尾最新的日志,而是保持进程处于活动状态,直到最后一条消息写入日志文件。老派但是有效。
答案 3 :(得分:0)
您可能希望“尾随”/ tmp / OraInstallXXX目录下生成的最新日志(ls -t会给出)。