저는 RHEL 6.7을 사용하고 있으며 전제조건을 확인하고, rpm 설치를 위해 시스템을 준비하고(제품에 아직 디렉토리가 필요하지 않은 경우 디렉토리를 생성함), 서비스를 중지하고, rpm을 설치하고, 서비스 백업을 시작하는 korn 쉘 스크립트를 가지고 있습니다. . rpm을 설치하기 전까지는 모든 것이 잘 작동했습니다. 10rpm 중 6rpm이 불완전하고 rpm 설치가 중단됩니다.
제품 소유자와 대화한 후 그들은 bash 쉘에서 rpm 설치를 실행하도록 제안했습니다. 그래서 rpm만 설치하면 원활하게 실행되는 작은 bash 쉘 스크립트를 만들었습니다.
이제 전체 메인 스크립트를 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
다음은 bash 스크립트를 실행하기 위해 ksh 스크립트를 변경한 후의 코드 예제입니다. 독립형 실행 시 성공합니다.
#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"