Apache Tomcat의 로그파일인 catalina.out 파일의 경우는 순환되는 설정이 없이 기동 후 삭제되지 않고

계속 기록만 되어지므로 용량이 계속 늘어나게 되고 검색이 어렵거나 늦어지는 경우도 발생하게 됩니다.


대표적인 오류 사항으로는 Tomcat 프로세스가 돌고 있는 상황에서 catalina.out 파일을 rm 삭제시

'df' 명령을 이용하여 파일시스템 사용량에서는 줄어들지 않는 사항이 발생한다.


해당 사항은 톰캣의 PID 를 'lsof' 로 확인시 (Deleted) 라는 항목으로 서비스 종료시 처리가 된다는 사항을

확인 할 수 있으며, 위와 같은 경우 '/dev/null' 을 이용한 Null Copy 를 진행하는 것을 권장합니다.



이러한 현상을 개선하기 위한 방법으로 편리하게 설정할 수 있는 방법을 2가지로 정리해보겠습니다.



1. Tomcat 설정파일(catalina.sh)을 수정하여 설정 - 'root' 권한 이용 불가능


 -> %CATALINA_HOME%bin/catalina.sh 수정 (두 항목 모두 수정할 것)

    => touch "$CATALINA_BASE"/logs/catalina.out 를 삭제 또는 주석 처리

    => "$CATALINA_BASE"/logs/catalina.out2>&1 & 를 다음과 같이 수정

        | /usr/sbin/rotatelogs "$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d 86400 540 &

           =================================================

             * 86400     : 일단위로 로테이션(초단위 설정)

             * 540        : 영국 표준시와 한국시간과의 시간차

           =================================================




2. /etc/logrotate.d 디렉터리내 Tomcat 로그 주기 설정 - 'root 권한 이용 가능


 -> # cd /etc/logrotate.d

 -> # vi ./tomcat

================================================================

/var/local/tomcat/logs/catalina.out {    =>톰캣의 로그가 기록될 경로로 지정

 copytruncate # 백업본을 생성하면 원본의 내용을 지우는 형태

 daily # '일'단위 파일 생성

 rotate 30 # 보관주기는 30일 단위

 compress # 'rotate' 내 로그파일은 압축보관(gzip)

 missingok # 로그파일이 생성되지 않는 경우 오류처리 하지 않음

 notifempty # 로그로 기록할 내용이 없을때 신규로그파일 생성 않함

#size 100M # 로그파일의 용량제한

}

================================================================



추가적으로 파일 자체를 생성하지 않도록 강제적인 설정이 있으나 권장하지는 않는 방법이지만

디스크 용량이 너무 적은 경우이거나 개인 테스트 용도로 작업하실 사항이 있으시다면

아래와 같이 '/etc/profile' 내용에 첨가하여 설정도 가능합니다.


 -> # vi /etc/profile

================================================================

export CATALINA_OUT="/dev/null"

================================================================



AND


[실행]
- 실행 퍼미션 설정 : #chmod +x [Shell 파일]

- Script 실행 : #./[파일이름] 또는 #sh [파일이름]


[Shell 정보 입력]
- Script 작성시 첫 라인 표기
  Bash 쉘 : #!/bin/bash
  korn 쉘 : #!/bin/ksh
  tcsh 쉘 : #!/bin/tcsh

 

[ 아규먼트 변수 ]

- 특별한 내장변수로 위치 매개변수로 사용한다.

- 매개변수를 불러올때 스크립트의 명령행 인자로 사용한다.

option
- $0 : 실행된 쉘 스크립트 이름
- $1 : 스크립트에 넘겨진 첫번째 아규먼트
- $2 : 스크립트에 넘겨진 두번째 아규먼트
- $# : 스크립트에 넘겨진 아규먼트의 개수
- $$ : 쉘스크립트의 프로세스ID
- $? : "[ '$?' 종료코드 ]" 참조

- $* : 스크립트에 전달된 인자 전체를 하나의 변수에 저장하며 IFS환경변수의 첫번째 문자로 구분
- $@ : $*와 동일 (다른점은 IFS환경변수를 사용하지 않음)
 

[ '$?' 종료코드 ]
- 0 (성공) , 1 ~ 125 (에러) , 126 (파일이 실행가능하지 않음) , 128 ~ 255 (시그널 발생)

 

예)

#vi argument.sh                            
------------------------------------------------------------------------------------------------------------------
#!/bin/bash                                          

  echo "This script file $0"
  echo "Argument Count is $#"
  echo "Process ID is $$"
  echo "Argument List \$* : $*"
  echo "Argument List \$@ : $@"
  echo "Argument 1 : $1"
  echo "Argument 1 : $2"
  echo "Argument 1 : $3"
  echo "This script code $?"
------------------------------------------------------------------------------------------------------------------

#./argument.sh a b c

-  This script file ./argument.sh
-  Argument Count is 3
-  Process ID is 31779
-  Argument List  $* : a b c
-  Argument List $@ : a b c
-  Argument 1 : a
-  Argument 2 : b
-  Argument 3 : c
-  This script code 0

 

[산술비교]
- [ $A -eq $B ] : A와 B가 같으면 참 (Equal)
- [ $A -ne $B ] : A와 B가 같지 않으면 참 (Not Equal)
- [ $A -gt $B ] : A가 B보다 크면 참 (Greater Then)
- [ $A -ge $B ] : A가 B보다 크거나 같으면 참 (Greater Equal)
- [ $A -lt $B ] : A가 B보다 작으면 참 (Less Then)
- [ $A-le $B ] : A가 B보다 작거나 같으면 참 (Less Equal)

- [ ! $A ] : A가 참이면 거짓, 거짓이면 참
- [ $A -a $B ] : $A AND $B의 결과, 둘 다 참이면 참
- [ $A -o $B ] : $A OR $B의 결과 , 둘 중 하나만 참이면 참

 
[문자열비교]
- [ string ] : string 이 빈 문자열이 아니면 참
- [ string1 = string2 ] : 두 문자열이 같으면 참
- [ srting1 != string2 ] : 두 문자열이 다르면 참
- [ -n string ] : 문자열이 null (빈문자열)이 아니면 참
- [ -z string ] : 문자열이 null (빈문자열)이면 참
 

[파일조건]
- [ -b FILE ] : FILE 이 블럭디바이스이면 참
- [ -c FILE ] : FILE 이 문자디바이스이면 참
- [ -d FILE ] : FILE 이 디렉토리이면 참
- [ -e FILE ] : FILE 이 존재하면 참
- [ -f FILE ] : FILE 이 존재하고 크기가 0보다 크면 참
- [ -g FILE ] : FILE 이 SGID 가 있으면 참
- [ -u FILE ] : FILE 에 SUID 가 있으면 참
- [ -k FILE ] : FILE 에 Sticky bit 가 있으면 참
- [ -L FILE ] : FILE 이 심볼릭링크이면 참
- [ -S FILE ] : 소켓디바이스이면 참
- [ -r FILE ] : 현재 사용자가 읽을 수 있는 파일이면 참
- [ -s FILE ] : 파일이 비어있지 않으면 참
- [ -t FD ] : FD (File Descriptor)가 열려진 터미널이면 참
- [ -w FILE ] : 현재 사용자가 쓸 수 있는 파일이면 (Writable file) 참
- [ -x FILE ] : 현재 사용자가 실행할 수 있는 파일이면  (Excute file) 참
- [ -O FILE ] : FILE 의 소유자가 현재 사용자이면 참
- [ -G FILE ] : FILE 의 그룹이 현재 사용자의 그룹과 같으면 참
- [ FILE1 -nt FILE2 ] : FILE1 이 FILE2 보다 새로운 파일 (최근의 파일)이면 참
- [ FILE1 -ot FILE2 ] : FILE1 이 FILE2 보다 오래된 파일이면 참
- [ FILE1 -ef FILE2 ] : FILE1 이 FILE2 의 하드링크, 즉 I-node 값이 같으면 참

'Program > Shell-Script' 카테고리의 다른 글

Bash-Shell Scripting 초간단 기초 예제  (0) 2012.05.01
AND

[ main.sh ]

pwd : /backup/shell

#vi ./main.sh

===================================================================================================

#!/bin/bash
clear
echo "=================================="
echo " 1. 사용자 관련"
echo " 2. 권한 관련"
echo " 3. 하드웨어 관련"
echo " 4. 검색 관련"
echo " 5. 시스템 종료"
echo " q. 프로그램 종료"
echo "=================================="
echo -n "메뉴를 선택 해볼래? : "
read tac1

 

echo "$tac1 을 선택하였습니다."


case $tac1 in
        1)./user/usermain.sh;;

        2)./ch/chmain.sh;;

        3)./hard/hdmain.sh;;

        4)./search/search.sh;;

        5)./sys/sysinfo.sh;;

        q)exit;;
esac

 

===================================================================================================

[ useradd.sh ]

pwd : /backup/shell/user

#vi ./useradd.sh

===================================================================================================

#!/bin/bash
clear
echo "================================"
echo "입력할 사용자 정보를 넣어주세요."
echo "================================"
echo -n "UserName 을 입력하세요 : "
read uaddname
if [ -z $uaddname ]
then
        echo "빈값을 입력하여 프로그램을 종료합니다."
        exit
else
        uaddname="$uaddname"
fi

 

echo -n "Uid 를 입력하세요 : "
read uadduid
if [ -z $uadduid ]
then
        echo "빈값을 입력하였습니다."
else
        uadduid="-u $uadduid"

fi


echo -n "Gid 를 입력하세요 : "
read uaddgid
if [ -z $uaddgid ]
then
        echo "빈값을 입력하였습니다."
else
        uaddgid="-g $uaddgid"
fi

 

echo -n "Home Directory 를 입력하세요 : "
read uaddhome
if [ -z $uaddhome ]
then
        echo "빈값을 입력하였습니다."
else
        uaddhome="-d $uaddhome"
fi

useradd $uadduid $uaddgid $uaddhome $uaddname


echo "입력하신 $uaddname 으로 생성하였습니다"
echo "================================"
echo -n "생성된 사용자 정보를 보시겠습니까?(yes/no) : "
read catuser
if [ -z $catuser ]
then
        echo "꺼져!"
        /backup/sh/main.sh
else
        if [ $catuser = "yes" ]
        then
                cat /etc/passwd | grep $uaddname
                echo -n "확인하셨습니까?"
                read
                /backup/sh/main.sh
        else
                echo "빠욤!"
                /backup/sh/main.sh
        fi
fi

 

===================================================================================================

[ usermod.sh ]

pwd : /backup/shell/user

#vi ./usermod.sh

===================================================================================================

#!/bin/bash
clear
echo "================================"
echo "수정할 사용자 정보를 넣어주세요."
echo "================================"
echo -n "UserName 을 입력하세요 : "
read umodname
if [ -z $umodname ]
then
        echo "빈값을 입력하여 프로그램을 종료합니다."
        exit
else
        umodname="$umodname"
fi

echo -n "Uid 를 입력하세요 : "
read umoduid
if [ -z $umoduid ]
then
        echo "빈값을 입력하였습니다."
else
        umoduid="-u $umoduid"
fi

 

echo -n "Gid 를 입력하세요 : "
read umodgid
if [ -z $umodgid ]
then
        echo "빈값을 입력하였습니다."
else
        umodgid="-g $umodgid"
fi

echo -n "Home Directory 를 입력하세요 : "
read umodhome
if [ -z $umodhome ]
then
        echo "빈값을 입력하였습니다."
else
        umodhome="-d $umodhome -m"
fi

usermod $umoduid $umodgid $umodhome $umodname
echo "입력하신 $umodname 으로 생성하였습니다"
echo "================================"
echo -n "수정된 사용자 정보를 보시겠습니까?(yes/no) : "
read catuser
if [ -z $catuser ]
then
        echo "꺼져!"
        /backup/shell/main.sh
else
        if [ $catuser = "yes" ]
        then
                cat /etc/passwd | grep $umodname
                echo -n "확인하셨습니까?"
                read
                /backup/shell/main.sh
        else
                echo "빠욤!"
                /backup/shell/main.sh
        fi
fi

===================================================================================================

[ userdel.sh ]

pwd : /backup/shell/user

#vi ./userdel.sh

===================================================================================================

#!/bin/bash
clear
echo "================================"
echo "삭제할 사용자 정보를 넣어주세요."
echo "================================"
echo -n "UserName 을 입력하세요 : "
read udelname
if [ -z $udelname ]
then
        echo "빈값을 입력하여 프로그램을 종료합니다."
        exit
else
        echo "홈디렉터리도 함께 삭제하시겠습니까?(yes/no) : "
        read udelmax
        if [ $udelmax = "yes" ]
        then
                userdel -r $udelname
        else
                userdel $udelname
        fi
fi


echo "입력하신 $udelname 사용자를 삭제하였습니다"
echo "================================"
echo -n "삭제된 사용자 정보를 보시겠습니까?(yes/no) : "
read catuser
if [ -z $catuser ]
then
        echo "꺼져!"
        /backup/sh/main.sh
else
        if [ $catuser = "yes" ]
        then
                cat /etc/passwd | grep $udelname
                echo -n "삭제되셨습니까?"
                read
                /backup/sh/main.sh
        else
                echo "빠욤!"
                /backup/sh/main.sh
        fi
fi

===================================================================================================

'Program > Shell-Script' 카테고리의 다른 글

Shell Script (기초)  (0) 2014.08.20
AND

ㅠㅠ 다시 작업하고 있는 스킨들인데...

다시 만들기가 이다지도 힘든건지 ㅠㅠ 지금에서야 알게되었어요;;;

데이터의 소중함을 잊지마시고!!! 꼭꼭 백업을 해두시기 바래요 ㅠㅠ


RainMeter_Skins_ing.zip


현재 작업중인 스킨자료랍니다^^


20120102 작업중인거에용!!

Noose.zip


20120425 작업용 스킨 백업본이에요!!

20110425_RainMeter_Skins.zip


AND

가젯을 이용하는 분도 많으시겠지만 제 블로그를 방문하시는 분들이라면.. 당연히

레인미터라는 스킨프로그램을 이용하시는 분들이겠죠~??

레인미터로 검색하여 사이트에서 다운로드하여 사용하실 수 있지만

보다 빠르게 다운로드를 받으실 수 있게 파일을 첨부해드립니다...

덧붙여, 레인미터 1.1 버전의 경우는 32/64 bit 로 나누어서 다운로드를 제공하기 때문에

자신의 시스템의 연산체계를 확인하신 다음 다운로드하세요^^

확인하시는 방법은 "Windows 키 + Break 키" 를 이용하여 출력되는 화면에서 확인이

가능하며, 참고용으로 아래에 그림을 첨부해드릴게요^^ (파란색 사각박스 참조)

[그림 참조]



1. [ 32 bit 용 ] 

Rainmeter-1.1-32bit.exe



2. [ 64 bit 용 ] 

Rainmeter-1.1-64bit.exe



레인미터 2.0 버전의 경우는 연산체계와 관계없이 다운로드를 제공하고 있습니다.

2.0 버전을 다운로드 하실 분은 요기 아래를 다운로드하세요^^

[레인미터 2.0] 

Rainmeter-2.0.exe

AND

오랜만에 레인미터에 재미를 붙이게 되면서.. 마무리용으로 세팅을 해보았는데요...

바탕화면 전체적인 사이즈1680 * 1050 으로 세팅을 했는데요...

자세한건 아래쪽 이미지를 클릭하시면 보실 수 있어요... 각각에 대한 내용은 아래쪽에 설명을 덧붙여드릴게요^^
[그림 참고]



각각 스킨들은 설명을 덧붙여 드릴게요^^

  a. 시스템 정보 스킨(\SYSTEMinfo\)
   - CPU 사용량, 메모리 사용량, 스왑 메모리 사용량, 각각의 HDD 사용량, 휴지통의 사용량을 나타내요.
   - 각각의 박스 아래쪽의 색상바를 클릭하는 경우 해당 정보를 대화창으로 출력해줘요.

  b. 시계 테마 스킨(\AeroTime\
   - 에어로 효과처럼 보이고 싶어서 테두리를 투명한 효과를 넣은 디지털 시계에요.
   - 아날로그형 디자인도 이뻐보여서 하나더 추가로 구현시킨 내용이에요.

  c. 누스의 PC 라는 징표!!(\Title\)
   - 텍스트 형식의 이쁜 글씨체로 한번 뿌려주고 싶었어요 ㅎㅎ

  d. 네트웍 상태 스킨(\Network\)
   - 현재 제 네트웍의 정보를 출력시켜줘요. 해킹이나 트레픽 정보를 보려고 적용시킨거에요..(IP는 비공개 ㅠㅠ)

  e. 이미지 프로필 스킨(\UserInfo\)
   - 제 트레이드 이미지인 데스노트의 "니아"를 본따 만든 이미지 스킨이에요.

  f. 스티커식 갤린더 스킨(\CalendarSticker\)
   - 오늘 날짜를 나타내주구요.. 스티커 식입니다. 년,월,일 과 요일을 출력하죠.

  g. 뮤직 플레이용 스킨(\Winamp\)
   - winamp 프로그램과 연동이 되게 되요.
   - 헤드폰 이미지를 클릭하면 winamp 프로그램을 실행시켜줍니다.
   - 윈엠프가 실행된 상태에서는 플레이어의 기능을 모두 출력시켜줘요(이미지 참고)

  h. 프로그램 실행 스킨(\Menubar\)
   - 각각의 아이콘을 클릭하면 해당 프로그램이 실행되요(원클릭으로 실행)
   - 그림처럼 각각의 아이콘에 마우스를 오버시키면 해당 프로그램 안내글이 출력되요
   - 독 프로그램들이랑 비슷하게 동작하려고 만든 스킨입니다.

  i. 검색바 스킨(\SearchBar\)
   - 순서대로 "네이버/구글/다음" 검색효과와 동일하게 브라우저를 출력시켜줘요.
   - 윈도우에 설정된 기본 브라우저로 출력되니까 참고하세요.

  j. 시스템 명령 스킨(\\)
   - 왼쪽부터 "로그오프/시스템 재시작/시스템 종료/윈도우 시작버튼" 이 적용되어 있어요.
   - 시스템 종료를 클릭하는 경우는 아래쪽 색상바에 숫자를 입력받도록 설정되어 있어요.
      ※ 입력값은 초당 계산하구요. 즉시종료를 위해선 숫자 "0"을 입력하시면 됩니다.


이상으로 상세 스킨 설명도 마쳤네요.. 오랜만에 마음에 쏙들게 세팅이되서 기분이 참 좋네요.
참고용으로 스킨은 아래쪽에 첨부파일로 첨부해드리니 쓰실 내용이 있으시면 쓰세요^^
 
AND

오랜만에 레인미터를 작업했는데... 상당히 깔끔하게 정리가 잘되서 이렇게 남겨둡니다 ㅎㅎ
바탕화면 사이즈는 1680 * 1050 입니다. 참고하세요.

[ 나의 바탕화면 ] 



우선 위쪽 왼쪽부터 순서대로 설명을 드립니다.
  1. 시스템 내역을 뿌려주는 부분으로 각각의 색상바를 클릭하는 경우 정보를 대화창으로 해서 출력.
  2. 시계 부분이구요.. 에어로 효과처럼 나타내려고 테투리를 투명효과로 바꾼 디자인.
  3. 네트워크 상태를 보여주는 내용.
  4. 저의 개인 프로필에 대한 정보로 이미지는 "니아" 이고 아래쪽 글은 제 닉네임.
  5. 윈엠프와 연동하여 작동하는 스킨.
  6. 스케쥴 스킨.
  7. 로컬 시스템내 설치된 필요한 부분의 아이콘들을 모아두는 메뉴.
  8. "네이버", "구글", "다음" 3개의 포털사이트에 각각 검색할 수 있는 써치바.
  9. 시스템 명령어를 사용하도록 설정한 스킨(로그오프, 리스타트, 시스템종료).

9개의 스킨을 적용한 사항이고 총 적용했을때 메모리 사용량이 16M 를 사용하게 되네요... 깔끔하면서 적은 용량으로 상당히 마음에
들도록 설정된 듯하여 너무 기분이 좋습니다~~~^^ 
AND

1. 첨부 파일내 "source.psd" 파일은 이미지 소스 자료입니다.

2. 첨부 파일내 Zip 파일은 사용하는 스킨의 압축파일입니다.
  ("C:\Documents and Settings\Administrator\My Documents\Rainmeter\Skins" 폴더에
   넣어서 사용하시면 됩니다.^^)

source.psd

Office_Skins.zip


스샷은.. 참고용입니다 ㅎㅎ


AND