본문 바로가기

ETC

리눅스 자동 스케줄링 - 크론탭(Crontab) 사용법

출처 : https://webdir.tistory.com/174 & jdm.kr/blog/2

1. Crontab ? 

특정 시간에 특정 작업을 작업을 수행하는 스케줄러

리눅스에서는 일반적으로 cron 데몬이 주기적인 작업 실행을 처리한다. cron이 시작될 때부터 끝날 때까지 계속 실행되며 실행되며 cron 설정 파일은 cron table을 줄여서 crontab이라 부른다

 

2. Crontab 사용방법

1. 시간주기 설정

 

vi /etc/crontab
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/ 

# For details see man 4 crontabs 
# Example of job definition: 
# .---------------- minute (0 - 59) 
# | .------------- hour (0 - 23) 
# | | .---------- day of month (1 - 31) 
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ... 
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 
# | | | | | 
# * * * * * user-name command to be executed
  • * : 범위 내 모든 경우
  • 숫자 : 정확히 일치하는 그 시각, 날짜
  • ' - ' 기호로 연결된 두 숫자 : 두 숫자 사이에 포함된 범위를 뜻함
  • 콤마( , )로 구분돼 나열된 숫자 : 나열된 숫자 중 일치하는 경우를 뜻함

 

2. crontab 명령어

crontab [ -u 사용자 id] 파일
crontab [-u 사용자 id] { -l | -r | -e}

  • crontab -l : 예약된 작업리스트
  • crontab -e : 예약된 작업 수정
  • crontab -r : 예약된 작업 삭제
  • crontab -u 사용자명 : 루트관리자는 해당 사용자의 crontab 파일을 보거나 삭제, 편집가능

3. crontab 사용자 제어

  /etc/cron.deny와 /etc/cron.allow 설정파일에서 사용자에 대한 crontab 제어를 관리할 수 있다.

  /etc/cron.allow

이 허용파일이 있는 경우 파일 내 지정된 사용자만 crontab을 등록할 수 있다. 지정되지 않은 사용자들은 crontab 명령을 실행할 수 없다.

  /etc/cron.deny

허용파일이 없는 경우에는 이 거부 파일이 사용된다. 파일 내 지정된 사람을 제외한 나머지 사용자에게 crontab 명령 실행 권한이 주어진다.

두 파일 모두 존재하지 않을시

두 파일 모두 존재하지 않는 경우에는 대다수 시스템에서 루트 관리자만이다. 데비안과 우분투 배포판은 이런 경우 모든 사용자에게 실행 권한을 준다.



3. cron이 참조하는 crontab 파일 위치

  • /var/spool/cron
  • /etc/cron.d
  • /etc/crontab

cron은 시작할 때 모든 곳에 저장된 설정파일들을 읽어 메모리에 저장해두고 휴지 상태에 들어간다. 그리고 매분마다 활성화돼 변경된 crontab 파일들이 있는지 확인하고, 변경된 경우 설정을 다시 읽어 저장하고, 그 시간에 실행해야 할 작업이 있는지 확인하고 실행시킨 후 다시 휴지 상태로 들어간다.

  /var/spool/cron

시스템 개별 사용자를 위한 crontab 파일 위치이며 일반적으로 root 계정용 하나와 계정 사용자당 1개의 파일을 가진다.

파일명은 사용자의 계정명이며 cron은 이 이름을 바탕으로 각 설정 파일에 지정된 작업들을 실행할 때 사용할 UID를 결정한다. 이 곳에 있는 설정파일들은 crontab 명령으로 관리한다.

  /etc/crontab

관리자가 직접 지정한 작업들을 설정하며, 임의의 사용자 권한으로 실행할 수 있다. 시스템 관련 작업들을 등록해 사용하는 곳이다.

 

4. 크론 로깅 (cron logging)

크론탭을 사용해서 정기적으로 작업을 처리하는 것은 좋은데, 해당 처리 내역에 대해 로그를 남기고 싶을 때가 있을겁니다. 그럴때 다음처럼 한번 써봅시다.

  * * * * * /home/script/test.sh > /home/script/test.sh.log 2>&1

 

위처럼 작성하면 매분마다 test.sh.log 파일이 갱신 되어 작업 내용이 어떻게 처리 되었는지 알 수 있습니다. 만약 2>&1 을 제거하면 쉘스크립트에서 표준 출력 내용만 나옵니다. 2>&1은 이곳에서 확인합시다.

그런데, 이게 너무 자주 실행 되고 또한 지속적으로 로깅이 되야 해서 로그를 계속 남겨둬야 한다면 다음처럼 입력합니다.

  * * * * * /home/script/test.sh >> /home/script/test.sh.log 2>&1

그러면 계속 로그가 누적이 되는 것을 확인 할 수 있을겁니다. 대신 로그가 과도하게 쌓이면 리눅스 퍼포먼스에 영향을 주므로 가끔씩 비워주거나 파일을 새로 만들어주는 센스가 필요합니다.

반대로 로그는 필요 없는 크론을 위해선 다음처럼 입력합니다.

  * * * * * /home/script/test.sh > /dev/null 2>&1

 

5. 크론탭 백업 (crontab backup)

crontab -r 를 쓰거나 실수로 crontab 디렉토리를 날려버려서 기존 크론 내역들이 날아갔을때, 백업은 다음처럼 하는 방법이 있습니다.

  crontab -l > /home/bak/crontab_bak.txt

크론탭 내용을 txt 파일로 만들어 저장

  50 23 * * * crontab -l > /home/bak/crontab_bak.txt

11시 50분에 크론탭을 백업해두는 크론 명령

'ETC' 카테고리의 다른 글

Eclipes 단축키  (0) 2020.11.23
PyCharm 단축키  (0) 2020.11.23
Visual Studio 단축키  (0) 2020.11.23
백엔드 개발자 직무 이해  (1) 2020.11.23
개발자 인터뷰 시 질문 모음  (0) 2020.11.23