Ben's

/etc/cron.daily 하위 스크립트들의 동작 분석 및 시스템에 미치는 영향 본문

리눅스

/etc/cron.daily 하위 스크립트들의 동작 분석 및 시스템에 미치는 영향

Ben Ko (SINCE 2013) 2013. 1. 16. 15:06
728x90

* 작성일: 2006-07-04

 

[00-logwatch]
* 00-logwatch 스크립트의 동작

   : 시스템 내의 로그 파일을 종합하여 설정에 따라 재가공 한뒤 지정된 메일주소로 보내주어 서버전체의 많은 로그를 한눈에
     볼 수 있게 해주는 스크립트(/etc/log.d/scripts/logwatch.pl 의 심볼릭 링크)

* /etc/log.d/conf/logwatch.conf: 00-logwatch 스크립트에서 참조하는 환경파일(logwatch 실행옵션 설정)
  - LogDir: 기본 로그 디렉토리
  - TmpDir: 기본 임시 디렉토리
  - MailTo: 메일 리포트를 받을 기본 메일 계정
  - Print: "Yes" 이면 메일을 보내는 대신 화면에 출력해준다.
  - UseMkTemp: mktemp가 설치되었고 -d 옵션을 쓸수 있으면 "Yes"로 지정해준다
  - MkTemp: mktemp 명령어의 절대경로 지정
  - Range: log들을 수집할 logfile들의 범위로 yesterday, today, ALL 중 선택가능함.
  - Detail: log들을 수집할때 얼만큼 세부적인 정보를 수집할 것인지 Low, Med, High 중 선택 가능함.
  - Service: /etc/log.d/conf/services 내의 서비스별 로그 추출 파일중 하나를 명시하거나 All을 사용하여 모두를 포함시킬수 있음.
  - mailer: mail 발송하는 명령어의 절대경로 지정

* /etc/log.d/conf/services/*: 디렉토리내의 각 파일들은 자신이 담당하는 서비스가 발생시키는 로그중 패턴검색을 통하여 중요한 정보만을 뽑아내는 역할을 함.

* 시스템에 미치는 영향

  : 시스템에 이상이 발생하여 로그파일의 양이 증가하면 스크립트의 수행시간이 길어지고 이에 비례하여 logwatch에 의해
    메일로 보내지는 log report의 양이 증가함.

 

[0anacron]
* 0anacron 스크립트의 동작
  - /etc/cron.daily 내의 다른 어떤 파일 보다도 먼저 실행됨.
  - anacron의 time-stamp만을 업데이트 해주는 스크립트
    (타임스탬프 파일 위치: /var/spool/anacron 내의 타임스탬프 파일에 날짜가 기록됨)

* anacron: anacron은 cron과 유사하지만 시스템이 꺼졌다가 다시 켜졌을 경우 매일, 매주, 매월 실행되는 cron 작업이

                제대로 실행되는지 확인하여 실행되지 않았다면 실행해 주는 데몬임.

* /etc/anacrontab: anacron의 환경파일
-------------------------------------------------------------------------------
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# These entries are useful for a Red Hat Linux system.
1       5       cron.daily              run-parts /etc/cron.daily
7       10      cron.weekly             run-parts /etc/cron.weekly
30      15      cron.monthly            run-parts /etc/cron.monthly
-------------------------------------------------------------------------------
  - 필드1: period, 여기서 명시한 주기 내에서 개별 작업들이 실행되었는지 확인함.(일단위)
  - 필드2: delay, 만일 주기 내에 개별 작업들이 실행되지 않았다면 부팅된후 여기서 명시한 시간을 지연한후 실행함.(분단위)
  - 필드3: job-identifier, 타임스탬프 파일명("/"는 사용할 수 없음)
  - 필드4: command, 실행할 명령

* 시스템에 미치는 영향: time stamp 파일만 업데이트 되므로 전체 시스템 운영에 지장 없음.


[logrotate]
* logrotate 스크립트의 동작: 주기적으로 logrotate를 실행하여 자동으로 로그파일을 순환, 압축, 삭제 해주는 스크립트임
                             (로그파일을 메일로 보내주는 기능을 수행하기도 함)

* /etc/logrotate.conf 파일: logrotate 가 실행될때 참조되는 환경파일
  - daily,weekly : 생성되는 로그 파일을 1일, 또는 1주일 단위로 새 파일로 순환
  - rotate : 로그 파일을 몇 주동안 보관할 것인지 결정
  - create : 이전 로그를 순환한 뒤 새로운 빈 로그 파일을 생성할 것인가 결정
  - compress : 백업한 로그를 gzip을 이용하여 압축해서 보관할 것인가를 결정
  - include : /etc/logrotate.d 에 존재하는 rpm 패키지에서 제공하는 로그 관리 정보를 이용할 것인가 결정

* /etc/logrotate.d: logrotate 시킬 각종 로그파일들의 설정들을 각 파일로 가지고 있는 디렉토리
  - 예) /etc/logrotate.d/syslog
----------------------------------------------------------------------------
/var/log/messages /var/log/secure {        => 대상로그파일(구분자: 공백)
   sharedscripts                                       =>대상로그파일이 여러개일 경우 현재 설정을 공유함
   postrotate                                             => logrotate 작업후(postrotate)/logrotate 작업전(prerotate) 수행할 작업
      /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true => logrotate 작업전 또는 후에 수행할 작업
   endscript                                              => postrotate/prerotate의 끝 시점을 나타냄.
}                                                             => "{" 부터 "}" 까지가 이 로그파일의 개별설정이 됨
----------------------------------------------------------------------------
※ missingok: 로그파일이 없더라도 에러로 처리하지 않음
※ size <SIZE>: <SIZE>에 해당하는 용량이 넘으면 rotate한다(단위: k(KB), M(MB))
※ monthly: 대상로그파일의 순환주기
※ compress: 순환된 파일을 gzip으로 압축함
※ rotate <N>: 순환되는 파일 갯수 지정(0부터 시작, 총 3개파일 존재함)
※ mail <mail address>: rotate 갯수를 초과하는 로그파일을 지정 메일주소로 보내줌

* /var/lib/logrotate.status: logrotate한 작업내역을 보관한 파일

* 시스템에 미치는 영향: 메일전송기능이 기본으로 off 상태이기 때문에 지정한 메일계정에 큰 메일 파일이 쌓이지 않음.

                                  그러나 size가 아닌 주별 순환주기를 가지기 때문에 시스템에 이상이 있을경우 로그파일이 있는

                                  파티션(/var)이 단시간에 큰 크기의 로그파일이 생길수 있음.


[prelink]
* prelink 스크립트의 동작

  : ELF 형태의 실행파일(바이너리파일)실행될때 그것이 사용하는 라이브러리들을 미리 링크시켜놓아 실제로 실행시

    실행속도를 높이기 위해 주기적으로 prelink 명령을 동작시키는 스크립트임.

* 파일 포맷
  - a.out: ELF 이전에 쓰이던 바이너리로 점차 사라져 가는 Binary file format
  - ELF(Executable and Linkable Format): 서로 다른 OS나 아키텍쳐에 호환이 될 수 있도록 표준화된 Binary file format.

     (a.out보다 진보된 기능 포함됨)

* prelink: prelink 패키지에는 ELF 공유 라이브러리와 실행 파일을 수정하는 유틸리티가 포함되어 있음.

              이 유틸리티를 사용함으로서 시작시 심볼을 검색할 필요가 없고 위치 재조정 작업이 감소하기 때문에,

              프로그램의 속도는 더욱 빨라짐.

* prelink 옵션
  -a: all, 프리링크를 수행할때 모든 실행파일과 라이브러리를 찾아 수행함.
  -v: Verbose mode, 현재 프리링크된 라이브러리와 실행파일, 또한 이것들의 가상주소슬롯할당 상황을 보여줌.
  -u: undo, 프리링크 되기전 초기상태로 되돌림.
  -f: force, 강제로 수행
  -m: conserve-memory, 라이브러리에 주소를 할당할때 제공된 주소공간슬롯들의 겹침 허용
  -R: random, 라이브러리에 주소를 할당할때 아키텍쳐에 의존하는 가상주소공간범위의 임의의 주소에서 시작

* /etc/sysconfig/prelink: prelink 환경파일
  - PRELINKING=yes : 프리링킹을 수행할 것인지의 여부
  - PRELINK_OPTS=-mR : 프리링킹 수행시 추가되는 옵션을 저장한 변수
  - PRELINK_FULL_TIME_INTERVAL=14: full prelinking 을 수행할 주기(단위:일)
  - PRELINK_NONRPM_CHECK_INTERVAL=7: 마지막 prelinking 일로부터 여기에 지정된 날짜만큼 경과되었고 업그레이드된 rpm 패키지가 없으면 prelinking을 하지 않음.

* /var/lib/misc/prelink.{full,quick}: full 또는 quick prelinking을 수행한 날짜를 저장하고 있는 파일

* /var/lib/misc/prelink.force: 이전 버전에서 사용하던 파일

* /etc/prelink.cache
  - prelinking을 수행하면 생기는 일종의 캐시파일.
  - 실행파일(바이너리 형식으로 되어 있어 cat명령 으로는 볼수 없음)로써 /usr/sbin/prelink -p 명령으로 상황을 볼수 있음.
  - 모든 프리링크된 바이너리/라이브러리, 각각이 사용하는 가상주소슬롯 위치등의 정보를 포함하고 있음.

* /var/log/prelink.log: prelinking 수행 결과를 저장하고 있는 로그파일

* 시스템에 미치는 영향: 주기적으로 실행됨으로써 새로 설치되거나 업데이트된 실행파일들의 실행 속도를 높여주는 효과가 있음.


[rpm]
* rpm 스크립트의 동작: 서버에 설치된 모든 rpm 패키지의 목록을 일정한 형식에 맞춘뒤 정렬하여 /var/log/rpmpkgs 파일에
                                 그 내용을 저장해주는 스크립트

* 시스템에 미치는 영향: 단지 rpm 패키지의 목록을 파일로 유지하는 것이므로 전체 시스템 운영에 지장 없음.


[slocate.cron]
* slocate.cron 스크립트의 동작: locate/slocate 명령으로 파일을 검색하는 데 이용하는 locateDB

                                             (/var/lib/slocate/slocate.db)를 생성/업데이트 해줌.

* locate/slocate : 미리 생성된 시스템에 존재하는 모든 파일의 경로에 대한 데이터베이스를 이용하여 검색하는 명령어

* /etc/updatedb.conf: slocate.cron 에서 참조하는 환경파일
  - PRUNEFS : locateDB를 생성할때 제외할 파일 시스템 추가
  - PRUNEPATHS : locateDB를 생성할때 제외할 디렉토리 추가

* 시스템에 미치는 영향
  - 실행되는 동안 스크립트 내의 renice +19 -p $$ >/dev/null 2>&1 구문의 영향으로 nice 의 수치가 내려가기 때문에

    이 작업의 priority가 높아져 iowait / CPU 사용율이 올라감.  만약 이 스크립트가 어떤 이유에 의해 종료되지 않고

    hang 되면 시스템에 부하를 줄 수 있음.
------------------------------------------------------------------------
[root@nhko /etc/cron.daily]# top

top - 18:53:59 up 5 days,  8:31,  1 user,  load average: 0.71, 0.22, 0.07
Tasks:  59 total,   2 running,  56 sleeping,   1 stopped,   0 zombie
Cpu(s):  0.0% us, 20.0% sy,  5.7% ni,  0.0% id, 74.0% wa,  0.3% hi,  0.0% si
Mem:    507736k total,   502136k used,     5600k free,   132512k buffers
Swap:  2096472k total,     1360k used,  2095112k free,    29992k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                               
24209 root      35  19  1772  768  468 R 23.0  0.2   0:07.22 updatedb    
------------------------------------------------------------------------


[tmpwatch]
* tmpwatch 스크립트의 동작: 시스템의 임시파일을 생성하는 디렉토리(/tmp등)내에서 일정기간 동안 접근이 없는 파일을 지워주는 스크립트
  - /tmp: 특정파일을 제외(스크립트내 -x 옵션으로 표시됨)하고 240 시간동안 사용하지 않은 파일 삭제함
  - /var/tmp: 720 시간 동안 사용하지 않은 파일 삭제
  - /var/cache: 720 시간 동안 사용하지 않은 파일 강제(-f) 삭제(root에서 write access를 하지 않았더라도 강제 삭제함)

* 시스템에 미치는 영향:  만약 위의 디렉토리 내에 용량이 큰 파일이 존재한다면 지우는 시간동안 전체 시스템 운영에 지장을 줄 수 있으나 가능성 적음.


[yum.cron]
* yum.cron 스크립트의 동작: yum 서비스가 start 되었을때 생성되는 lock 파일(/var/lock/subsys/yum)의 유무를 검사하여

                                        먼저 yum 패키지를 업데이트 하고
                                        이어 다른 모든 패키지에 대해 업데이트를 해주는 스크립트

* 업데이트시 오류가 발생해 프로세스가 종료되지 않을 경우를 대비해 yum 패키지 업데이트 시간은 최대 10분, yum을

   뺀 나머지 패키지의 업데이트 시간은 최대 120분으로 지정되어 있으며 이 시간이 지나면 업데이트가 모두 진행되지

   않았더라도 종료됨.

* 시스템에 미치는 영향: 기본으로 yum이 disable 상태로 되어 있어서 영향 없음.