주기적 실행 작업 관리 : cron (cron job) & logrotate

whatSup CheatSheet·2022년 12월 18일
0
post-thumbnail

cron이란

  • Linux 배포판을 포함한 Unix 계열 컴퓨터 운영 체제의 시간 기반 작업 스케줄러
    • 쉽게 말해, 정의된 스케줄에 따라 명령을 실행하는 도구
  • cron 작업을 수행하는 데몬은 시스펨 시작 시 구동되고(systemd), 계속 실행 됨
  • 스케줄 설정 : cron table (crontab) 파일 생성

cron 서비스의 job 관리

  • cron service는 사용자 정의 cron job와 시스템 정의 cron job으로 나누어 짐
  • 시스템이 정의한 crontab 구성에는
    • 일, 시간, 일, 주, 월별 주기 작업을 위한 설정이 포함되어 있음
    • 해당 디렉토리에 포함된 스크립트를 실행
    • ex) /etc/cron.daily 디렉토리의 작업을 매일 6:00에 실행

crontab 커맨드

# 기존 crontab 항목 편집 (사용자 정의 cron job)
crontab -e
# root 사용자는 다른 사용자의 정보도 확인 가능
crontab -e <USER_ID>

# crobtab 리스트 출력 
crontab -l

# crontab 삭제
crontab -r

crontab 설정

  • (0~59) / (0~24) / (1~31) / (1~12) / 요일(0~6)
  • *은 모든 것과 일치함을 의미
  • ,은 반복 실행을 의미
  • -는 범위 실행을 의미
  • /은 간격 실행을 의미

# 특정 시간
* * * * * <CMD> : 매 1분 마다 명령을 실행
0 * * * * <CMD> : 매 1시간 마다 명령을 실행 (1:00, 2:00, ...)
0 0 * * * <CMD> : 매 1일 마다 명령을 실행 (00:00)
0 2 * * * <CMD> : 매일 새벽 2시에 명령을 실행
0 2 * * 6 <CMD> : 매주 토요일 새벽 2시에 명령을 실행

0,10,20 * * * * <CMD> : 매 시간 0분, 10분, 20분마다 명령을 실행
0-30 0 * * * <CMD> : 매일 00:00부터 00:30까지 명령을 실행
*/10 * * * * <CMD> : 매 10분마다 명령을 실행

logrotate

로그 파일 관리를 도와주는 도구

  • 로그 압축, 제거, 특정기간 단위로 로그 분리, 메일 전송, ….
  • 모든 리눅스 배포판의 표준 로그 관리 유틸리티임
  • /etc/cron.daily 디렉토리 내 logrotate를 실행하는 shell script가 존재

/etc/logrotate.conf

  • logrotate의 default 설정이 명시되어 있는 곳(전반적인 설정을 함)

/etc/logrotate.d/*

  • rotate를 돌릴 각 프로그램의 설정
  • 여기에 logrotate 설정 파일만 추가하면 로그 관리 기능을 구현할 수 있음
  • cron에 의해 매일 1회 수행됨

logrotate 작성 가이드

옵션설명예시/비고
rotate [숫자]log파일이 [숫자]개 이상이면 삭제rotate 5
maxage [숫자]log파일이 [숫자]일 이상이면 삭제maxage 30
size지정된 용량보다 클 경우 로테이트 실행size +100k
create [권한][유저][그룹]로테이트 되는 log파일 권한 지정create 644 root root
notifempty로그 내용이 없으면 로테이트 하지 않음
ifempty로그 내용이 없어도 로테이트
monthly월 단위 로테이트 진행
weekly주 단위 로테이트 진행
daily일 단위 로테이트 진행
compress로테이트 되는 log파일 압축
nocompress로테이트 되는 log파일 압축 하지 않음
missingoklog파일이 발견되지 않은 경우 에러처리 하지 않음
dateext백업파일의 이름에 날짜가 들어가도록 함
copytruncate로그 데이터를 새로운 파일로 카피하고, 기존 파일을 0으로 만들어서, 새 로그 저장용으로 사용(즉, 저장될 파일은 같음)장점 : 앱이 로그 파일을 새로 열 필요가 없음. / 단점 : 카피를 하기 때문에 로그내용이 많은 경우 오랜 시간이 걸릴 수 있음
postrotate로그 로테이션이 완료된 후에 실행될 스크립트ex) 앱에 시그널을 보내서 로그 저장용 파일을 새로 여는 것
lastaction-endscriptlogrotate output을 생성하고 실행

logrotate 예시

  • MongoDB 로그 관리
    • 설정 파일 생성
      cd /data/log/logrotate
      vim docker
      /var/log/mongodb/mongod.log {
      	su root root
      	daily
      	size 300M
      	rotate 7
      	missingok
      	compress
      	delaycompress
      	notifempty
      	create 664 ubuntu ubuntu
      	sharedscripts
      	postrotate
      	sudo /bin/kill -SIGUSR1 `ps -ef | grep mongod | grep 
      -v grep | awk '{print $2}`
      	endscript
      }
    • log 실행(루트 권한)
      logrotate -f /etc/logrotate.d/[rotate_name]
  • nginx 로그 설정
    /var/log/nginx/*.log {
    	daily
    	missingok
    	rotate 14
    	compress
    	delaycompress
    	notifempty
    	create 0640 222-data adm
    	sharedscripts
    	prerotate
    					if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
    									run-parts /etc/logrotate.d/httpd-prerotate;
    					fi \
    	endscript
    	postrotate
    					invoke-rc.d nginx rotate >/dev/null 2>&1
    	endscript
    }
    • invoke-rc.d nginx rotate >/dev/null 2>&1sudo service nginx rotate 명령어와 같음. (즉, nginx log 파일을 새로 오픈한 것)
profile
AI Engineer : Lv 0

0개의 댓글