본문 바로가기

Linux/Linux공통

[Linux] 기본 명령어 및 shell script 기초

1. 유용한 linux 명령

 

1.1. console 창에서 동일 명령 loop 돌리기

 

loop 돌리기는 모니터링 시 아주 유용하다.

예를 들어 running / active 세션중 tibero 계정에서 수행되는 QUERY중 ELAPSED TIME이 10 이상인 것들의 SQL_ID를 찾아야 된다는 미션이 주워질때 우선 해당 내용을 찾는 shell을 짜고 생성한 shell script를 loop 돌리면 된다.

 

#1. shell script 생성

$vi t1.sh
#!/usr/bin/ksh
TIME='date'
tbsql -s sys/tibero << EOF
set linesize 132
set feedback off

col SQL_ID format 9999
col PREV_SQL_ID format 9999
col status format a10
col username format a20
col ELAPSED_TIME format 999,999,999

select A.SQL_ID, A.PREV_SQL_ID, A.status, A.username, B.ELAPSED_TIME
from v\$session A, v\$sqlarea B
where A.username = 'TIBERO1' and A.status in ('ACTIVE','RUNNING')
and A.SQL_ID = B.SQL_ID and B.ELAPSED_TIME > 10
union all
select A.SQL_ID, A.PREV_SQL_ID, A.status, A.username, B.ELAPSED_TIME
from v\$session A, v\$sqlarea B
where A.username = 'TIBERO1' and A.status in ('ACTIVE','RUNNING')
and A.PREV_SQL_ID = B.SQL_ID and B.ELAPSED_TIME > 10;
exit;
EOF
echo "------ CHECK TIME =" $TIME "-----------------------------------------"

#2. loop 수행 방법

$ while :
> do
> sh t1.sh
> sleep 2
> done;

1.2. 명령어 결합('|')과 grep

결합 구문은 linux 를 이용하는 사용자라면 유용하고 자주 사용하는 방법이다. '1.2' 에서는 결합구문을 이용하여 많이 사용되는 몇몇 명령어를 설명 하겠다.

 

1.2.1. find 사용 기법

파일명이 정확하지 않을때 원하는 파일이 있는지 확인을 할 경우가 종종 발생을 한다. 그런 경우에는 find 와 grep 을 결합하여 찾아 볼 수 있다.

 

#1. 단일 구문

$ find ./ -name "*session*.sql"

만약 여러개의 파일의 내용중 원하는 내용이 있는 파일을 찾고 싶을 때는 아래와 같이 명령어를 조합하여 수행한다.

 

#2. 조합 구문

$ grep "session" `find ./ -name "*.sql"`
$ find ./ -type f -name "*.sql" -exec grep "session" {} \; -print

#tip. 여러 파일중 특정 내용을 한번에 변경하는 방법

find ./ -name "*.sql" -exec perl -pi -e 's/session/leotest/g' {} \;

1.2.2. 사용중인 PORT 확인

티베로를 설치 할때 site 담당자가 알려준 port 가 사용가능한지 먼저 확인을 할때나 DB LINK 이슈로 oracle listener 가 떠있는지 확인이 필요할 때가 필요하다. 그럴때는 이렇게 하여 확인 한다.

#1. 명령 구문

netstat -na | grep LISTEN | grep [확인할 포트]

#2. tip

만약 8629 port로 떠있는 listener 에 어떤 IP가 붙어 있는지 확인도 가능하다. 종종 AP1번~AP4번 서버 중 개발자는 분명히 붙였다고 주장할 때가 있다. 이런 경우 본 명령어로 확인을 해주고 만약 붙어 있지 않을 경우 해결하는 방법론은 '1.3.1'에서 간단명료 하게 설명을 하겠다.

 

1.3. 네트워크 관련 명령

 

1.3.1. 네트워크 연결 확인 방법

 

#1. AP 서버와 DB 서버 사이의 network 확인 방법 가장 간단한 방법은 telnet xxx.xxx.xxx.xxx port 로 접속 테스트를 해본다 만약 연결이 되지 않을 시 telnet xxx.xxx.xxx.xxx 으로 서버 대 서버가 연결이 되었는지 확인 한다. 만약 위 두 가지 방법으로 접속이 되지 않을 경우에 담당자가 엔지니어에게 확인을 요청하는 경우가 있다. 이런 경우를 대비해 #2에 다음 방법을 설명 하겠다.

 

#2. 내부 네트워크 연결 상태 확인

traceroute 라는 명령어가 있다. 보통 내부 서버사이에는 ICMP를 열어두기 때문에 AP 서버와 DB 서버 사이의 network 연결상태를 확인 할 수 있다. 명령어를 수행한 결과를 보고 어느 구간까지 network가 연결이 되었는지 확인하고 담당자에게 말해주면 쉽게 네트워크 작업이 끝날 수 있다. 간혹 해당 명령어를 root에서만 수행이 되도록 막는 경우와 정말 보안이 철저하여 내부 network 에서도 ICMP를 막아 뒀다면 해당 site의 네트워크 팀에 문의를 해야 한다고 가이드를 하면 된다.

linux -> $ traceroute xxx.xxx.xxx.xxx
windows -> c:\> tracert xxx.xxx.xxx.xxx

#tip. 수행내역

위에 실제 수행한 내역이며 결과적으로 목적지까지 통신이 가능한 상태이다 만약 3번 이하부터 * * * 로 계속 표시가 되었다면 테스트 서버에서 목적지까지 192.168.254.18 번 서버에서 방화벽에 막혀 그 다음 네트워크 구간으로 이동을 하지 못한 상황으로 site 담당자에게 이런 내용을 설명 한다.

 

1.3.2. 방화벽 포트 확인 방법(iptables)

'1.3.1'에서 telnet 테스트로 포트만 막혀 있다고 판단되면 아래와 같이 확인 한다. root 계정에 속한 명령어로 현재 세팅된 방화벽 목록을 확인 할 수 있다.

그 외 옵션도 있으며 필요한 내용은 검색을 해보면 된다.

$ iptables -L

만약 사용될 포트가 세팅이 되어 있지 않으면 아래와 같은 차례로 작업을 하면 되고, 어쩔수 없이 엔지니어가 적용을 해야 할 때는 반드시 모든 명령어는 확인 및 적용은 site 담당자와 같이 하도록 한다.

1.4. 기타 명령

1.4.1. 큰 용량의 로그파일을 보는 방법(tail)

간혹 vi로 파일을 열어도 os buffer보다 커서 열리지 않는 경우가 있다. tail 명령어는 log에 attach 되는 것을 단순 실시간으로 보여주는거 외에 해당 파일을 자르는 옵션(-n [자를 행의 수])도 있다 파일의 내용을 가져올때는 파일의 가장 뒤부터 가져온다.

$ tail -n 100 trace.log > aa.txt

#tip. '>' 와 '>>'

 

'>' 는 앞의 명령어로 나온 결과 물을 뒤의 파일에 옮기는 기능을 하며 만약에 똑같이 두번 실행을 해도 결과는 마지막에 수행한 내역이 들어간다

 

'>>' 는 뒤의 파일에 앞의 명령어로 나온 결과 물을 계속 attach 한다.

 

1.4.2. 파일정보 확인

해당 파일의 유형을 알려준다.

사용할 바이너리가 32bit 인지 64bit 인지 의심스러울 때 사용한다.

$ file [파일명]

1.4.3. 디스크 용량 확인하기

#1. 디스크 용량 보기

$ df -m --> 마운트 되어 있는 하드 디스크의 용량을 메가바이트 단위로 표시
$ df -h --> 보기에 익숙한 단위로 표시해줌

#2. 디렉토리 사용량 보기

$ du -m [디렉토리명] --> 특정 디렉토리의 디스크 사용량을 메가바이트 단위로 확인
$ du -h --> 현재 디렉토리의 사용량을 보여준다.

1.4.4. 파일의 링크 걸기

esql 컴파일을 할때 정의된 path에 라이브러리가 없으며 다른 path에 라이브러리가 존재할때 심볼릭 링크를 걸어주면 아주 좋다. 왜냐 라이브러리 파일은 한개로 유지 하는것이 관리적인 측면에서 용이하며 ap souce의 버그를 방지할수 있다.

이유는 서로 다른 라이브러리가 파일명만 같고 여기저기 있다고 생각해 봐라 아주~ 끔찍한 사태가 벌어지기 쉽다. 그래서 그런것을 방지하고자 링크를 걸 것을 권장한다.

$ ln -s [링크시킬파일이름] [링크파일이름]

1.4.5. 여려 파일을 하나로 합치기

로그파일을 여러개로 쪼개서 보내준 것을 하나로 합치기 위해 사용한다.

$ cat a.log b.log c.log d.log > t.log

1.4.6. nohup

종종 이관을 DB LINK 걸어서 shell script로 하는 경우가 있다. 이런 경우 os 에서 console 접속시간에 제한을 걸었다면 다음날 아침은 상상하기 싫은 현실을 맞이 할 수 있다. 이런 것을 방지하기 위해 nohup을 사용하여 방지 할 수 있다.

$ nohup ./a.sh &

1.4.7. console 창에서 수행한 명령어 저장

console 창에서 작업을 하다 전에 수행한 명령어를 다시 치기 불편하다면 console 창에 "set -o vi"를 수행하거나 .profile에 아래와 같은 내용을 세팅하면 'k','j' 키를 이용하여 편하게 작업 할 수 있다.

$ vi .bash_profile
...
set -o v

 

2. shell script 기초

 

2.1. 유용한 명령어 - 이것만 알면 용이하게 script를 개발할 수 있다.

 

2.1.1. awk

패턴 검색과 조작을 목적으로 사용하는 명령어로 라인 처리시 필드 단위로 처리할 수 있다. 실제 예로 쉽게 설명을 하겠다. #1. tbsvr 프로세스를 모두 kill 시켜라

$ kill -9 `ps -ef | grep tbsvr | awk -F " " '{print $2}'`

#1'의 내용은 tbsvr 프로세스를 ps 명령어로 프로세스 목록을 찾고 거기서 awk 명령을 이용하여 공백(" ")을 기준으로 2번째 컬럼 값(PID)만 받아온다. 그후 kill -9 뒤에 검색한 PID 값으로 프로세스를 kill 한다.

#tip. ` ` 은 무엇일까?

간단하게 설명하면, ` ` 사이의 명령을 수행하고 결과 값을 반환해라 라는 것이다.

 

2.1.2. sed

sed는 텍스트 파일에 있는 특정 문자열을 다른 문자열로 변경할때 사용한다.

#1. 옵션 - 필요한 것들은 알아서 연습 하시오.

#2. 예제 : 파일에서 특정 내용을 치환하여 새로운 파일로 저장을 하라

$ sed 's/session/leotest/g' monitor.sql > aa.txt

2.1.3. let 변수의 산술 계산에 사용되는 명령어 이다.

예제를 보면 쉽게 기억이 날 것이다.

첫번째 인자값을 변수 A에 넣고 B변수에는 A변수 + 1을 하여 출력하는 간단한 script 이다.

 

2.2. shell script 문법 소개

 

2.2.1. 기본 설명

# : 주석문, 해당줄을 주석 처리 한다.

#! : 작성되는 프로그램의 스크립트 해석 Shell을 지정 한다. (#! /usr/bin/ksh)

 

2.2.2. 변수지정

일반적으로 특별히 변수 선언이 없다. "="을 기준으로 좌측에 변수명, 우측에 값을 입력 한다.

2.2.3. 시스템 변수

 

2.2.3.1. 변수 설명

2.2.3.2. 작성

root@KAISER$ vi test_echo.sh

#!/bin/sh
LocalVar="LovalValue1"
echo "Your Home Directory is $HOME"
echo "Your local variable is $LocalVar"
echo "Your arguments number is $#"
echo "all arguments in a single line $*"
echo "Your process ID is $$"
echo "Arguments in quotes $@"
echo "Current shell option $-"
echo "Exit status $?"
echo "Your script name is $0"
echo "Your first argument is $1"
echo "Your second argument is $2"

2.2.3.3. 실행결과

2.2.4. 외부 프로그램 실행 결과를 변수에 저장

 

2.2.4.1. 문법

변수=$(명령)

변수=`명령`

 

2.2.4.2. 실행 결과

2.2.5. 파일 체크

[ 파일비교연산자 파일 ]                   // [ ] 사이에 공백

 

2.2.5.1. 부호 설명

-a : 파일 존재?

-b, -c, -d, -f, -h, -L, -S : 파일 유형 검사

-k : sticky bit 설정 유무

-r, -w, -x : 읽기, 쓰기, 실행 가능?

-s : 파일 크기가 0보다 큰지?

FILE1 ?nt FILE2 : newer than

FILE1 ?ot FILE2 : older than

 

2.2.5.2. 실행 결과

2.2.6. 문자열 체크

: [ 스트링비교연산자 “문자열” ]

 

2.2.6.1. 부호 설명

= : 같다.

!= : 같지 않다.

-z : NULL이면 참

-n : NULL이 아니면 참

 

2.2.6.2. 실행 결과

2.2.7. 숫자 체크

: [ “숫자” 숫자비교연산자 “숫자” ]

 

2.2.7.1. 부호 설명

-eq : 같다.

-ne : 같지 않다.

-lt : 작다.

-le : 같거나 같다.

-gt : 크다.

-ge : 크거나 같다.

 

2.2.7.2. 실행 결과

// 3이 4보다 크다?

// 거짓

// 3이 4보다 작다?

//참

2.2.8. if문

: 조건1이 참이면 실행명령1 실행, 조건1이 거짓이면 실행명령2 실행

 

2.2.8.1. 문법

if 조건1; then
     실행 명령1
 else
     실행 명령2
 fi
 
 if 조건1
 then
     실행 명령1
 else
     실행 명령2
 fi

2.2.8.2. 작성

vi if.sh

#!/bin/sh
 input=$(echo $1 | tr "[a-z]" "[A-Z]")
 if [ "$input" = "HI" ]
 then
      echo "Your input is $input"
      echo "HI"
 elif [ "$input" = "HELLO" ]
 then
      echo "Your input is $input"
      echo "HELLO"
 else
      echo "Your input is $input"
 fi

2.2.8.3. 실행 결과

2.2.9. case문

: 판단값의 패턴과 일치여부에 의해 실행명령 실행

 

2.2.9.1. 문법

case 판단값 in
 패턴1)
     실행명령
     ;;
 패턴2)
     실행명령
     ;;
 *) --이외의 조건 처리
     실행명령
     ;;
 esac

2.2.9.2. 작성

vi case.sh

#!/bin/sh
 case $1 in
 start)
         echo "strating My deamon...[OK]"
         exit 0
         ;;
 stop)
         echo "stopping My deamon...[OK]"
         exit 0
         ;;
 restart)
         echo "stopping My deamon...[OK]"
         echo "strating My deamon...[OK]"
         exit 0
         ;;
 *)
         exit 1
         ;;
 esac

2.2.9.3. 실행 결과

2.2.10. for문

: 변수를 목록만큼 실행명령 실행

 

2.2.10.1. 문법

for 변수명 in 목록
 do
    실행명령
 done

2.2.10.2. 작성

vi for.sh

#!/bin/sh
 for i in 1 2 3 4 5 6 7 8 9
 do
      for j in 1 2 3 4 5 6 7 8 9
      do
            result=`expr $i \* $j`
            echo "$i * $j = $result"
      done
 done

2.2.10.3. 실행 결과

2.2.11. while문

: 조건이 참이면 실행명령 실행

 

2.2.11.1. 문법

while 조건
 do
      실행명령
 done

2.2.11.2. 작성

vi while.sh

#!/bin/sh
 i=1
 result=0
 while [ $i -le 10 ]
 do
         result=`expr $result + $i`
         i=`expr $i + 1`
 done
 echo "1 to 10 : $result"

2.2.11.3. 실행 결과

2.2.12. break, continue

: 루프 종료, 처음부터 실행

 

2.2.12.1. 작성#1

vi break.sh 

#!/bin/sh
 i=0
 result=0
 while [ $i -le 9 ]
 do
          i=`expr $i + 1`
          if [ $i -eq 5 ]
          then
                    echo “breaking loop”
                    break
          fi
          result=`expr $i + $result`
          echo "result is $result"
 done

2.2.12.2. 실행 결과#1

2.2.12.3. 작성#2

vi continue.sh 

#!/bin/sh
 i=0
 result=0
 while [ $i -le 9 ]
 do
          i=`expr $i + 1`
          if [ $i -eq 5 ]
          then
                    echo "skipping loop"
                    continue
          fi
          result=`expr $i + $result`
          echo "result is $result"
 done

2.2.12.4. 실행 결과#2

2.2.13. 함수

 

2.2.13.1. 문법

함수이름() -- function label
 {
    실행명령
  -- function body
 }

2.2.13.2. 함수의 반환형태

return : 가장 마지막 수행 명령의 상태 반환

return 0 : 에러 없음

return 1 : 에러

 

2.2.13.3. 작성

vi func.sh

#!/bin/sh
 greeting()
 {
         echo “Hello World”
 }
 greeting

2.2.13.4. 실행 결과

2.3. 샘플 script

참고 용으로 몇개의 script를 작성했다. 스스로 필요한 script를 작성해 보기 바란다.

 

2.3.1. FTP 전송 script

#!/bin/sh
Server=$2
Port=21
Username=$3
Password=$4
Target=$1
Source=/data/$1

FTPput()
{
ftp -n $Server $Port<< End-Of-Session
user $Username $Password
bi
passive
prompt
put $1 $5
bye
End-Of-Session
}

FTPput "${Source}" "${Target}"

2.3.2. 루프를 통해 파일에서 값을 추출하여 결과 값을 누적시키는 샘플

#!/usr/bin/sh
FPATH="/tmaxdata/master_daily/gsretail/send"
for FNAME in `ls $FPATH/RECV_$1??.dat`
do
# echo $FNAME
  let "i=1+`cat $FNAME | wc -l`"
# echo $i
  FLINE=`tail +$i $FNAME`
# echo $FLINE
  NORMAIL_COUNT=`expr substr $FLINE 3 7`
  NORMAIL_SUM=`expr substr $FLINE 10 13`
  CANCEL_COUNT=`expr substr $FLINE 23 7`
  CANCEL_SUM=`expr substr $FLINE 30 13`
# echo "$NORMAIL_COUNT | $NORMAIL_SUM | $CANCEL_COUNT |
$CANCEL_SUM"
  let "a=$a+$NORMAIL_COUNT"
  let "b=$b+$NORMAIL_SUM"
  let "c=$c+$CANCEL_COUNT"
  let "d=$d+$CANCEL_SUM"
done
echo "--< 월정산 >--"
echo "정상수납건 = [$a] , 정상수납금액 = [$b]"
echo "취소처리건 = [$c] , 취소처리금액 = [$d]"

#tip

소스상의 subsrt로 결과값을 추출하였으나 패턴이 규칙적이다면 awk 을 사용하여 처리 할 수도 있다.

 

2.3.3. tmax 환경에서의 간단한 업무 모니터링 script

#!/usr/bin/sh
#-- DB 접속 정보 --
LOGDATE=`date +%m%d%Y`
DBID="ubill"
DBPW="ehsqjfwk"
DBSID="BILL"

MPATH="/home/tmax/shell/monitoring/log"
SPATH="/tmaxdata/log/ulog"
#INDATE=$1

NODENAME=`hostname`
TMAXBATCH="
ucssp4024
ucssp4035
ucssp4026
ucssp4028
ucssp4030
"

function A000_tb_lcltaxacpmst
{
sqlplus -s $DBID/$DBPW@$DBSID <<EOF > $MPATH/resuelt.$INDATE
SET SERVEROUT ON
SET HEAD OFF
SET PAGESIZE 0
SET FEEDBACK OFF
SET LINE 1000

select trim(count(*))
from tb_lcltaxacpmst
where acpno = $TMPACPNO
and acpgbcd ='1'
and acpenddtms = '99991231235959'
;
EOF
}

function card_check_main
{
echo "check date input ->"
read INDATE

rm -rf $MPATH/resuelt.$INDATE

clear

echo "*****************************"
echo "* 카드결제 비정상 승인 번호 *"
echo "*****************************"
A000_tb_lcltaxacpmst
for TMPBUF in `cat $MPATH/resuelt.$INDATE`
do
    echo "$TMPBUF"
          TMPSVCNM=`echo $TMPBUF | awk -F "|" '{print $1}'`
          TMPACPNO=`echo $TMPBUF | awk -F "|" '{print $2}'`

          echo "$TMPACPNO|$RESUELT"
          RESUELT=`cat $MPATH/resuelt.$INDATE`
          
          if [ $RESUELT != "1" ] ;
          then
                  echo "$TMPACPNO 거래 확인 요망"
          fi

done

read TMP

clear
}

function svc_nrdy_check
{
         clear
         echo "************************"
         echo "* 비활성 상태인 서비스 *"
         echo "************************"

         echo st -v | tmadmin -n $NODENAME | grep NRDY

         read TMP

         clear
}

function svc_statistics
{
    clear
    echo "********************"
    echo "* 서비스 통계 확인 *"
    echo "********************"
    
svcrpt -i $SPATH/svclog.$LOGDATE

    read TMP
 
    clear
}

function svc_err_chedk
{
CDT=`date`

echo "[$CDT]" >> $MPATH/errchk.$LOGDATE
for ERRBUF in `echo st -v | tmadmin -n ubill2_1 | awk -F " " '{print $2}'|grep -v gw`
do
    CHKCNT=`ls -lrt $SPATH/$LOGDATE/$ERRBUF.log | wc -l`
    if [ $CHKCNT != "0" ] ;
    then
        SVCCNT=`grep "cpErrBuf" $SPATH/$LOGDATE/$ERRBUF.log | wc -l`
        if [ $SVCCNT != "0" ] ;
        then
            echo "$ERRBUF=$SVCCNT" >> $MPATH/errchk.$LOGDATE
        fi
    fi
done
clear
echo "*****************"
echo "* SERVICE ERROR *"
echo "****************"
cat $MPATH/errchk.$LOGDATE
echo "-------------------------------------" >> $MPATH/errchk.$LOGDATE

read TMP
clear
}

function svc_log_chk
{
clear
echo "*******************"
echo "* 서비스로그 확인 *"
echo "*******************"
echo "서비스명 입력(소문자) : "
read svc_nm
grep "cpErrBuf" $SPATH/$LOGDATE/$svc_nm.log > $MPATH/$svc_nm.$LOGDATE
cat $MPATH/$svc_nm.$LOGDATE

read TMP
clear
}

function samsung_friendly
{
echo "[삼성제휴카드 전송실패 건수]"

sqlplus -s $DBID/$DBPW@$DBSID <<EOF > $MPATH/samsung_friendly.$INDATE
SET SERVEROUT ON
SET HEAD OFF
SET PAGESIZE 0
SET FEEDBACK OFF
SET LINE 1000

select '회원가입', ':', count(*) from tb_alnccardreq
where ALNCCARDSNDSTATCD = '9'
union all
select '비회원가입', ':', count(*) from TB_ALNCCARD_GROCKLE
where cd_stat_alnc = '9';

EOF

cat $MPATH/samsung_friendly.$INDATE
echo "-------------------------------------------------------------------------------------"
}

function batch_chk
{
    echo "[배치 실행체크]"
# for BATCH_SVC in `crontab -l | grep boot | awk -F " " '{print $7}'`
    for BATCH_SVC in $TMAXBATCH ;
    do
        BATHC_CHK=`ls -lrt $SPATH/$LOGDATE/$BATCH_SVC.log | wc -l`
        END_CHK=`grep "cBsnAdmCd" $SPATH/$LOGDATE/$BATCH_SVC.log | grep
"\[004\]" | wc -l`
        TT=`crontab -l | grep boot | grep $BATCH_SVC | awk -F "*" '{print $1}'`
        echo "$BATCH_SVC=[$BATHC_CHK], end chk[$END_CHK] : $TT"
 done
 }
 
function ucs_down_chk
{
   ctime=`date +%H%M%S`
   if [ "$ctime" -ge "120000" ] ;
   then
         echo "[12시00분이 넘었다. 매입다 내려]"
         for BATCH_SVC1 in `crontab -l | grep boot | awk -F " " '{print $7}'`
         do
             B_CHK=`echo st -v $BATCH_SVC1 | tmadmin -n ubill2_1 | grep $BATCH_SVC1 |
grep -v NRDY | wc -l`
             if [ "$B_CHK" = "1" ] ;
             then
                echo "[$B_CHK]:$BATCH_SVC1 down"
tmdown -S $BATCH_SVC1
          fi
       done
   fi
}

function set_service_timeout
{
    cd $SPATH/$LOGDATE
 
    echo "[서비스 타임아웃 목록]"
    grep "set_service_timeout" $SPATH/$LOGDATE/*
    echo "[G/W 호출실패]"
    grep "Message Failed" $SPATH/$LOGDATE/*

}

while [ : ]
do
clear
samsung_friendly;
echo "[삼성ARS 프로세스 확인]"
ps -ef | grep tmax | grep java | grep -v grep | grep sendMessage
echo "-------------------------------------------------------------------------------------"

echo "[부산시 HTTP 프로세스 확인]"
ps -ef | grep tmax | grep java | grep -v grep | grep opt
echo "-------------------------------------------------------------------------------------"

batch_chk;

ucs_down_chk;

set_service_timeout;

sleep 300

done