레이블이 shell인 게시물을 표시합니다. 모든 게시물 표시
레이블이 shell인 게시물을 표시합니다. 모든 게시물 표시

2015년 8월 2일 일요일

awk 로 프로세스 상태를 확인하는 스크립트 만들기

linux 에서 시스템의 프로세스를 모니터링하는 스크립트를 awk 를 이용하여 작성 하였습니다. 

shell 에서 prop 파일을 읽어서 awk 스크립트를 이용해서 처리하는 구조 입니다.

총 3개의 파일로 구성되어 있고 추가적인 기능이 필요 한경우 awk  스크립트에 구현을 하면 됩니다 .


1. shell 파일 (disp.sh)


#!/bin/bash

set SCRIPT_PATH = '/home/user/util/'
awk -f ${SCRIPT_PATH}disp.awk ${SCRIPT_PATH}proc.prop
    


* script_path : 스크립트 패스가 있는 폴더를 설정하면 됩니다. 

2. prop 파일(proc.prop) 


# Title processKey 
tomcat tomcat

apache httpd

* 첫번째 필드는 표시될 이름 입니다. 
* 두번째 필드는 ps -ef 명령 실행시 찾을 문구 입니다.  

3.  awk 파일 ( disp.awk)


#!/bin/awk
#
# This Program is display WEB status

BEGIN {
    # width 66
    pFormat = "%12s|%12s|%14s|%10s|%12s|\n";
    pStar = "*****************************************************************"
    pBar  = "-----------------------------------------------------------------";

    print "";
    print pStar;
    print "*              Display WEB Applicatin Status                    *";
    print pStar; 
    printf(pFormat ,"PROCESS", "PID", "START TIME", "COUNT", "STATUS");
    print pBar;
}

# ROUTINE 
{
    #if ( $1 == "#" ) {
    if ( $1 ~ /^#/ || $1 == "") { 
        # print "Skip....";
    } else {
        cmd = "ps -e -o pid,start,command |grep " $2 " | grep -v grep" ;
        #system(cmd) | getline psResult;
        
        count = 0;
        while (cmd | getline line) {
            # print line;
            split (line , res, " ");
            if (count == 0 ) {
                pid = res[1];
                sTime = res[2];
            }    
            count++;
        }
        close(cmd)

        status= "     \033[1;31mUNKNOWN\033[0m";
        if( count > 0 ) {
            status = "ALIVE";
        }

        printf(pFormat , $1, pid, sTime, count, status); 
    }

}

END {
    print pBar;
    print pStar;
    print "";
}


* 프로세스에서 지정된 키워드를 가진 프로세스의 숫자를 세서 보여 줍니다.


실행을 하면 다음과 같은 결과를 출력하게 됩니다.
*************************************************************
*            Display WEB Applicatin Status                  *
*************************************************************
     PROCESS|        PID|   START TIME|    COUNT|     STATUS|
-------------------------------------------------------------
      tomcat|           |             |        0|    UNKNOWN|
      apache|         37|       5:39PM|      113|      ALIVE|
-------------------------------------------------------------

*************************************************************

프로세스의 상태와 개수및 시작 시간 그리고 하나도 발견이 안되는 경우  붉은 글씨로  UNKNOWN 으로 표시 하게 됩니다. 











2015년 7월 30일 목요일

Tomcat 서버 로그 롤링 하기 (쉘 스크립트 + cron)

기본 적으로 Tomcat의 catalina.out 로그는 롤링이 되지 않기 때문에 별도의 방법을 사용해야 합니다.

쉬운 방법은  shell 을 만들어  cron 에 등록하면 됩니다.

1.  catalina.out 을 오늘 날자로 백업 하고 현재 catalina.out  초기화 하기
2.  30일 이상되는 오래된 파일 삭제



#!/bin/bash

LOG_DIR="/usr/local/tomcat/logs"
EXPIREDAY="+30"

DATE=`date +%Y-%m-%d`
cp  $LOG_DIR/catalina.out $LOG_DIR/catalina.$DATE.out
cat /dev/null > $LOG_DIR/catalina.out

find "$LOG_DIR" -ctime $EXPIREDAY -exec rm -f {} \;



**
- 로그 폴더에 여러 파일이 섞어 있는 경우 삭제시 find 명령어에  -name 옵션을 사용하면 필터링이 가능합니다.

- 삭제 대신 이동을 하려면 find  명령어 마지막 부분을 변경하면 됩니다.

2010년 8월 24일 화요일

Unix Shell 계열

[OS 별 기본 Shell]

  • 솔라리스 : C shell
  • HP-UX : Bourne Shell(sh)
  • Linux : Bourne Again Shell (bash)
** BSD 계열은 보통 C Shell 이고  Sys V 계열은 본쉘(콘쉘) 이다.

[Shell 의 발전]
  • 본쉘을 확장시켜 GNU의 Bourne Again Shell(bash)이 만들어 졌다.
  • ksh은 Bourne Shell 을 과 호환되면서 C Shell의 좋은기능을 추가하여 만든쉘 ( pdksh 라는 공개버젼이다. )
  • tcsh 는 C Shell 을 기반으로 Command Line 에서 programmable 하고 Command-line 편집이 가능하도록 확장된 버젼( csh 의 공개버젼)
  • Bourne Shell(sh) < Korn Shell (ksh) < Bourne Again Shell (bash) < ZShell (zsh)
  • C Shell (csh) < TC Shell (tcsh)

[Shell] 특정 폴더의 jar 모두 classpath 에 추가하기

Jar 를 Classpath에 추가 해야 하는 shell 에 다음과 같이 추가 한다.



for filename in [Jar가 있는경로]/*.jar
do
    CLASSPATH=${CLASSPATH}:$filename
done

[Shell] Stdout log 잘라내는 shell

#!/usr/bin/sh

# 사용시 주의 사항 stdout 로그를 만드는 스크립트가 >> 형태로 되어 있어야만된다.
# 만약 > 형태로 존재 하면 사용하던 파일사이즈만큼 null을 넣고 그 아래 로그가 이어져 남게 된다.

LOG_DIR=/WLS/bea/user_projects/domains/mydomain
BACKUP_DIR=${LOG_DIR}/backup
STDOUT_LOG_NAME=Admin.out
FILE=${LOG_DIR}/${STDOUT_LOG_NAME}
BACKUP_FILE=${BACKUP_DIR}/${STDOUT_LOG_NAME}.`date +"%Y%m%d_%H%M"`

cp $FILE $BACKUP_FILE
> $FILE

echo "*************************************************"
echo "Done file backup from ${FILE} to ${BACKUP_FILE}"