我使用的是 RHEL 6.7,有一个 korn shell 脚本,它会检查先决条件、为 rpm 安装准备系统(如果产品还没有需要的话,则创建目录)、停止服务、安装 rpm 并启动服务备份。在安装 rpm 之前一切都运行良好。 10 rpm 中的 6 rpm 不完整,然后 rpm 安装挂起。
与产品负责人交谈后,他们建议我们在 bash shell 中运行 rpm 安装。所以我做了一个小的 bash shell 脚本,只需 rpm 即可安装,并且运行顺利。
现在,我不是将整个主脚本更改为 bash,而是调用在 ksh 脚本中安装 rpm 的 bash 脚本,并且它在 rpm 安装期间仍然挂起。
任何可能导致此问题的想法。
这是在 ksh 中运行 rpm install 时的代码
rpm --prefix $MOUNTINST -ivh $BIN/MQSeriesRuntime_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesSDK_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesServer_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesClient_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesSamples_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesJava_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesJRE_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesMan_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesExplorer_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesAMS_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesGSKit_6-8.0.0-0.x86_64.rpm 2>&1 | tee /tmp/MQinstV80.out
if_error $? "Installing MQSeries V8.0"
chown mqm:mqm /tmp/MQinstV80.out
if_error $? "Changing ownership of MQinst.out"
Temporary workaround till IBM gets back with a fix
mkdir $MOUNTINST/logs
chown mqm:mqm $MOUNTINST/logs
chmod 755 $MOUNTINST/logs
这是在 ksh 脚本中进行更改以运行 bash 脚本后的代码示例,独立运行时成功
#rpm --prefix $MOUNTINST -ivh $BIN/MQSeriesRuntime_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesSDK_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesServer_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesClient_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesSamples_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesJava_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesJRE_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesMan_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesExplorer_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesAMS_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesGSKit_6-8.0.0-0.x86_64.rpm 2>&1 | tee /tmp/MQinstV80.out
/var/mqm/trace/WMQUNX8000.00/LINUX/MQV8000GA/6/x86_64/install.sh
#if_error $? "Installing MQSeries V8.0"
#chown mqm:mqm /tmp/MQinstV80.out
#if_error $? "Changing ownership of MQinst.out"
# Temporary workaround till IBM gets back with a fix
#mkdir $MOUNTINST/logs
#chown mqm:mqm $MOUNTINST/logs
#chmod 755 $MOUNTINST/logs
答案1
我会假设很多,你的描述缺乏很多需要的信息,否则会产生误导。
我假设这install.sh
是您希望在 bash 中运行的脚本,由您提供为:
a="/var/mqm/trace/WMQUNX8000.00/LINUX/MQV8000GA/6/x86_64/install.sh"
如果这是真的,请将其称为:
/path/to/bash "$a"
当然,install.sh 应该有这段代码 再次,(叹气)
- 假设 if_error 可以通过下面代码中的函数 if_error 来实现。
- $bin 是 bin 文件夹的值,例如
/usr/bin
- 你做没有这个问题。
#!/bin/bash
# If bash is not installed in /bin/bash,
# use the correct path above.
bin="/usr/bin"
mountinst='some wild guess of its value'
if_error(){
if [[ $1 != 0 ]]; then
shift
echo "$@"
fi
}
rpm --prefix $mountinst -ivh $BIN/MQSeriesRuntime_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesSDK_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesServer_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesClient_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesSamples_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesJava_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesJRE_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesMan_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesExplorer_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesAMS_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesGSKit_6-8.0.0-0.x86_64.rpm 2>&1 | tee /tmp/MQinstV80.out
if_error "$?" "Installing MQSeries V8.0"
chown "mqm:mqm" "/tmp/MQinstV80.out"
if_error "$?" "Changing ownership of MQinst.out"
# Temporary workaround till IBM gets back with a fix
mkdir "$mountinst/logs"
chown "mqm:mqm" "$mountinst/logs"
chmod "755" "$mountinst/logs"