Deb*_*Das 2 linux oracle shell oracle11g silent-installer
我正在运行一个脚本来安装带有静默选项和响应文件的Oracle DB 11g.
执行命令后我注意到了shell
$ /directory_path/runInstaller -silent -responseFile responsefilename
Run Code Online (Sandbox Code Playgroud)
安装会话刚刚关闭,只给我一个日志文件位置.
安装过程在后台处于活动状态.但对于我来说,没有办法取消进展和发生的事情......直到运行根脚本的提示出现.如果我关闭腻子窗等怎么办?
有什么办法让安装程序会话保持活动状态直到完成 并在屏幕上显示某种进展?
有什么办法让安装程序会话保持活动状态直到完成
是的,您可以等待oracle静默安装在Linux上完成,例如在shell脚本中,如下所示.
(以下是针对Redhat Enterprise Linux的oracle 11g第2版.)
您可以通过执行以下操作来等待它完成:
$ /directory_path/runInstaller -silent -responseFile responsefilename |
while read l ;
do
echo "$l" ;
done
Run Code Online (Sandbox Code Playgroud)
(这依赖于以下事实:即使java通用安装程序在后台运行它仍然使用stdout,因此"read l"会继续成功,直到后台通用安装程序进程退出)
并在屏幕上显示某种进展?
有点棘手但我们可以通过在退出之前从runInstaller的输出中找出日志文件的名称来实现.输出包含如下行:
Preparing to launch Oracle Universal Installer from /tmp/xxxxOraInstallTTT. ...
Run Code Online (Sandbox Code Playgroud)
... 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]
)
Run Code Online (Sandbox Code Playgroud)
...我们还可以判断安装是否成功,因为通用安装程序始终通过以下两行将其退出状态放入日志中:
INFO: Exit Status is 0
INFO: Shutdown Oracle Database 11g Release 2 Installer
Run Code Online (Sandbox Code Playgroud)
...所以在#[1]处添加上述内容......
exitStatus=$(expr $(grep -B1 "$log" | head -1) : "INFO: Exit Status is\(.*\)") &&
exit $exitStatus
Run Code Online (Sandbox Code Playgroud)
...仅当oracle安装成功完成时,上述"脚本"才会以0状态退出.
(请注意,上面包含expr捕获的状态中的空间是故意的,因为如果匹配的子字符串字面上为"0",则奇怪的expr退出状态为1)
令人惊讶的是,oracle会因为在linux/unix上"背景"通用安装程序而遇到很多麻烦,因为:
客户在后台一般运行脚本是微不足道的:
runInstaller xyz&...或... setsid runInstaller xyz
很难(正如我们上面所看到的)等待"埋藏"的背景过程完成,而且一般不能完成
通过从runInstaller/.oui同步运行通用安装程序,Oracle本可以节省自己和其他人的大量工作.