본문 바로가기

Slack 채널 정리

제목 붙이기 애매한 shell script

젠킨스 쓰려고 간만에 짜 본 쉘 스크립트. 요건은 이렇습니다. 인스턴스 기동 시키면 이 녀석이 서버와 접속하고 등등해서 정상 작동하는데 좀 시간이 걸립니다(정상 작동 되었는지 상태를 확인할 수 있는게 스크립트에서 사용한 sbc 란 streambase 솔루션에서 제공하는 유틸) sbc 란 명령 유틸로 상태 확인해서 정상 동작할 때 까지 COUNTER 의 횟수만큼 기동 상태 확인하는 기능을 합니다. 크게 어렵지 않은건데 점심 시간 날려 먹게한 놈이 두 군데 있었으니  1. sbc -p $1 status | grep -c "ERROR" 로 간단히 구현했는데 결과가 의도한대로 안 나와서 ... 한참을 헤매다가 2>&1 이거 추가하고 나서야 정상 작동 
2. 
check_process "12102" 
echo "$?"
if [ "$?" -eq 1 ]$? 값으로 1이 틀림없이 찍히는데 if [ "$?" -eq 1 ]; 을 타지 않는 문제 계속 발생 ㅜㅠ ... 하다 하다 안되어 set -x 를 선언해서 변수 값 디버깅해보니 [ 0 -eq 1 ] 으로 계속 나오는 것 발견. 한참이나 고민한 후에야 원인 떠올랐는데 범인은 echo. 쉘 스크립트에서 $? 는 가장 최근에 실행한 함수의 종료 상태값이 담기는데 check_process 실행 후 echo 를 집어넣어 놓은 것 때문에 echo 의 실행 종료 상태값이 0이 계속 셋팅되었던거. 당연히 echo 라인 삭제하고 나니 의도한대로 작동. 역시나 쉘 스크립트는 할게 못 된다는거 새삼 확인 ㅜㅠ

#!/bin/bash
check_process() {
  [ "$1" = "" ]  && return 0
  return $(sbc -p $1 status 2>&1 | grep -c "ERROR")
}

COUNTER=0
while [ $COUNTER -lt 3 ]; do
  ts=`date +%T`

  check_process "12102"
  if [ "$?" -eq 1 ]; then
    echo "$ts: not running, wait ..."
  else
    echo "$ts: running" && exit 0
  fi
  sleep 5
  let COUNTER=COUNTER+1
done

exit 1

'Slack 채널 정리' 카테고리의 다른 글

go 로 xml 파일 읽어서 db 에 저장  (0) 2019.12.04
json validation - readTree  (0) 2019.12.03
node.js child_process 한글 출력 문제  (0) 2019.12.03
powershell 로 winrm 이용하는 예  (0) 2019.12.03
grep, pgrep, fgrep  (0) 2019.12.03