#7 프로세스 주기적인 실행(crontab)

유상우·2022년 8월 25일
0

주기적인 실행이 필요한 이유

  • 새벽 1시 마다 보안 관련 도구 실행
  • 백업 및 미러링 => 데이터베이스 백업, remote host에 directory 단위 복사 등
  • 배치 작업 수행
    *무거운 배치 작업이 많은 서버가 동시에 실행되지 않도록 주의
    ex) sleep rand 9000 && [command line]
  • 시스템 정보를 메일로 전송
    => 로그 파일 로테이션
    => 일정 기간 지난 데이터는 압축, 그 후에는 삭제

cron(cron job)

  • 정의된 스케줄에 따라 명령을 실행하는 도구
  • cron 작업을 수행하는 데몬은 시스템 시작 시 구동되고, 계속 실행됨
  • 스케줄 설정 => cron table(crontab) 파일 작성
  • crontab 관리
    $ crontab -e : 기존 crontab 항목 편집
    $ crontab -l : crontab 리스트 출력
    $ crontab -r : crontab 삭제
    *root 사용자는 다른 사용자의 crontab 정보도 확인 가능 => crontab -e USER_ID

crontab 설정

  • 분(0-59) 시(0-24) 일(1-31) 월(1-12) 요일(0-6) 명령
    ex) * * * * [command] - 매 1분 마다 명령을 실행
    ex) 0
    * * * * [command] - 매 1시간 마다 명령을 실행
    ex) 0 0
    * * * [command] - 매일 명령을 실행
    ex) 0 2
    * * * [command] - 매일 새벽 2시에 명령을 실행
    ex) 0 2
    * * 6 [command] - 매주 토요일 새벽 2시마다 명령을 실행
  • 참고
    • *는 모든 것과 일치
    • 하나의 정수는 정확히 그 값과 일치
    • -기호는 분리된 두 정수 범위 값과 일치
    • 범위 값 다음에는 단계 값이 포함(ex. 1-10/2)
    • ,로 분리된 범위 목록은 나열된 값 중 하나와 일치

실습

# 매분 타임 스탬프 값을 로그 파일에 기록
- 설정 내용
매분 : * * * * *
타임 스탬프 값 : echo $(/bin/date) - $(/usr/bin/uptime)
로그 파일에 기록 : >> /tmp/uptime.log

- crontab 편집
$ crontab -e

- crontab 내용 확인
$ crontab -l

- crontab 내용 삭제
$ crontab -r

ctontab으로 로그 파일 관리

운영 중에 로그 파일이나 임시 파일의 증가로 disk full 관련한 장애가 적지 않게 발생
=> crontab 으로 로그 파일 관리 방법
- 타켓 app은 nginx
- nginx 로그 파일을 관리하는 작업을 crontab으로 관리
 * access.log, error.log
- 로그 파일 관리 정책 => logrotate
 * 매일 로그 파일 관리 프로그램 실행
 * 날짜가 지나면 로그 파일을 로테이트
 => 이전 날짜의 로그는 별도 이름으로 저장
 ex) access.log, access.log.1
 * 2주가 지난 log는 삭제
 * 오래된 로그 파일은 압축된 형태로 저장
 ex) access.log, access.log.1, access.log.2.gz, access.log.3.gz ...
 
# 실습 내용
$ amazon-linux-extra install -y nginx1
=> 패키지 설치 과정에 로그 파일 관리 내용이 포함되어 있음

logrotate

  • 로그 파일 관리를 도와주는 도구
  • 로그 압축, 제거, 특정 기간 단위로 로그 분리, 메일 전송 등

crontab 설정은 어떻게?

=> 이미 시스템에 구성이 되어 있다

crontab + logrotate

  • 시스템에 일반적으로 시간/일/주/월 단위의 주기적 작업을 위한 구성이 만들어져 있음
    • cron.hourly,cron.daily,crontab.weekly,crontab.monthly
      => 해당 디렉토리에 실행할 작업을 스크립트 형태로 등록하면 됨
  • 일 단위 주기적 작업에 logrotate가 등록되어, 지정된 시간에 매일 logrotate가 실행 됨
  • logrotate는 /etc/lograte.d 디렉토리 내에 등록된 작업(nginx)을 진행

별도의 로그 관리 기능 구현이 필요한 경우?

=> /etc/logrotate.d에 logrotate 설정 파일만 추가

profile
Potentialist

0개의 댓글