응용 프로그램이 성공적으로 다시 시작되었는지 확인하려고 합니다. 응용 프로그램을 중지하는 데는 문제가 없지만 응용 프로그램을 시작하는 데 문제가 있습니다. 애플리케이션이 시작되지만 스크립트는 계속 실행되며 사이트가 백업되는 동안 루프가 종료되지 않습니다.
$aem_curl
다른 스크립트를 실행하고 성공하면 다음 결과를 표시하고 응답 코드를 제공하는 var가 있습니다 . 하지만 실패하면 응답 코드가 표시됩니다.CheckHttp OK: 200, found /crxde/ in 11038 bytes
0
CheckHttp CRITICAL: 503
2
내 코드:
aem_curl="./check-http-aem.rb -h localhost -P 4502 -p /crx/de/index.jsp --response-code 200 -q 'crxde' -t 30"
STOP_TMOUT=15
echo "starting $AEM_APP this will take a few mins..." | ${LOG_FILE}
sudo $restart_aem start
count=0
while true; do
echo "Waiting for AEM to start try #${count} ..." | ${LOG_FILE}
$aem_curl
if [ $? -eq 0 ]; then
echo "AEM has started! status code - $?" | ${LOG_FILE} && break
else
echo "AEM has not started yet - status code is $?" | ${LOG_FILE}
fi
if [ "$count" -eq "${STOP_TMOUT}" ]; then
MESSAGE="Already waited 10 minutes for AEM start something is amiss." | ${LOG_FILE}
exit 1
fi
count=$(($count+1))
sleep 20
done
내 결과:
Waiting for AEM to start try #0 ...
CheckHttp CRITICAL: Request error: Failed to open TCP connection to localhost:4502 (Connection refused - connect(2) for "localhost" port 4502)
AEM has not started yet - status code is 1
Waiting for AEM to start try #1 ...
CheckHttp CRITICAL: 503
AEM has not started yet - status code is 1
Waiting for AEM to start try #2 ...
CheckHttp CRITICAL: 503
...
Waiting for AEM to start try #19 ...
CheckHttp CRITICAL: 200, did not find /'crxde'/ in 11038 bytes: <!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=8"/><title>CRXDE Lite</title><link rel="shortcut icon" href="icons/crxde_favicon.ico"><link type="image/...
AEM has not started yet - status code is 1
Waiting for AEM to start try #20 ...
CheckHttp CRITICAL: 200, did not find /'crxde'/ in 11038 bytes: <!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=8"/><title>CRXDE Lite</title><link rel="shortcut icon" href="icons/crxde_favicon.ico"><link type="image/...
AEM has not started yet - status code is 1
답변1
다음과 같은 것을 더 시도해 보세요.
maxcount=15
count=0
while [ "$count" -lt "$maxcount" ] && ! ./check-http-aem.rb -h localhost -P 4502 -p /crx/de/index.jsp --response-code 200 -q 'crxde' -t 30; do
...
sleep 20
let count+=1
done
if [ "$count" -eq "$maxcount" ] ; then
echo "AEM hasn't started" >/dev/stderr
exit 1
fi
while 루프는 $count > $maxcount까지 실행됩니다.또는 ./check-http-aem.rb
종료 코드 0 반환(true)
$LOG_FILE
그런데, 귀하의 변수가 무엇인지, 때로는 텍스트를 입력하지만 때로는 "$MESSAGE"를 설정하는 이유를 모르겠습니다 . 아니면 변수 대신 쉘 함수를 사용하는 것은 어떨까요? 또는 기존 도구(예 logger
: .
반품...
셸을 사용하여 스칼라 변수를 공백으로 분할하는 것보다 배열을 사용하여 명령 인수를 보유하는 것이 더 좋습니다. 예를 들어 다음을 수행합니다.
aem_args=(-h localhost -P 4502 -p /crx/de/index.jsp --response-code 200 -q 'crxde' -t 3)
./check-http-aem.rb "${aem_args[@]}"
또는
aem_curl=./check-http-aem.rb
aem_args=(-h localhost -P 4502 -p /crx/de/index.jsp --response-code 200 -q 'crxde' -t 3)
$aem_curl "${aem_args[@]}"
바꾸다:
aem_curl="./check-http-aem.rb -h localhost -P 4502 -p /crx/de/index.jsp --response-code 200 -q 'crxde' -t 30"
$aem_curl
이들은 본질적으로 동일한 작업을 수행하지만 후자가 오류 및 예상치 못한 동작이 발생하기 쉽습니다. 예를 들어, 후자 형식을 사용하면 IFS 변수를 변경하지 않고 공백 문자가 포함된 인수를 스크립트에 쉽게 전달할 수 없습니다. 이렇게 하면 잠재적으로 원하지 않는 다른 결과가 발생할 수 있습니다. 하지만 배열을 사용하면 이 작업이 쉽습니다.
즉, 다음과 같이 할 수 있습니다.
maxcount=15
count=0
aem_args=(-h localhost -P 4502 -p /crx/de/index.jsp --response-code 200 -q 'crxde' -t 3)
while [ "$count" -lt "$maxcount" ] && ! ./check-http-aem.rb "${aem_args[@]}"; do
...
sleep 20
let count+=1
done