Cron

Violet_Evgadn·2023년 4월 27일
0

Linux

목록 보기
22/34

Cron

Cron이란?

Cron은 그리스어 "Chronos"의 약자이다.

cron은 유닉스 계열의 잡 스케줄러로써 지정된 스케줄(시간)에 따라 자동으로 테스트(업무)를 실행하는 시스템 프로세스를 말한다.소프트웨어 환경을 설정하고 관리하는 사람들은 주기적으로 특정 작업(보안 작업, 계정 등록 등)을 실행할 수 있도록 스케줄링하기 위하여 cron을 사용한다.

Cron을 사용하는 태스크에는 아래와 같은 것들이 있다.

  • 로그 파일이나 DB 파일의 백업
  • 오래된 파일 삭제
  • DB 테이블 아카이브(Archive)나 퍼지(Purge)
  • 정규 알림 메시지
  • 캐시 데이터 Clean Up
  • 시스템 유지보수 자동화 등

crontab

Cron Table의 약자로써 crontab 파일에 의해 cron 작업이 주기적으로 실행될 수 있다.

Cron은 Linux 서버가 부팅 될 때 시작되고 init 과정에서 데몬으로 백그라운드 프로세스로써 실행된다.

이후 크론은 사용자의 개입 없이 실행되며 crontab에 명시한 이벤트를 주기적으로 발생시키며 역할을 수행하게 된다.

크론이 참조하는 crontab 파일 위치는 3개이다.

먼저 /etc/crontab이다.

이는 관리자(Root 계정)가 직접 지정한 크론 작업들을 설정하며 임의의 사용자 권한으로도 실행할 수 있다.

여기에는 시스템 관련 작업들을 등록하여 사용한다.

두 번째는 /var/spool/cron이다.

이는 시스템 개별 사용자를 위한 crontab 파일 위치이며 일반적으로 root 계정을 위한 crontab과 서버 계정당 1개씩 crontab 파일을 저장하고 있다.

파일명은 계정명(Username)이며 크론은 파일명을 바탕으로 지정된 크론 작업을 실행할 때 사용할 UID를 결정하게 된다.

이곳에 있는 설정파일들은 crontab 명령으로 관리한다.

마지막은 /etc/cron.d이다.

여기에는 소프트웨어 패키지를 설치할 때 필요한 주기적인 작업들을 등록하는 공간으로 사용된다.

cron의 사용자 제어

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

/etc/cron.allow 파일이 존재할 경우 해당 파일에 지정된 사용자만 crontab을 등록할 수 있다.

다른 사용자들은 crontab 명령을 수행할 수 없다.

/etc/cron.deny 파일이 있을 경우 파일 내에 지정된 사람들을 제외한 나머지 사용자들에게 crontab 명령을 실행할 수 있는 권한을 준다. /etc/cron.allow 파일이 없을 경우 사용되는 크론 설정 파일이다.


Crontab 사용법

Crontab 문법

위 사진에서 볼 수 있듯 "분, 시, 일, 월, 요일, [사용자명], 실행명령" 순으로 Crontab에 크론 작업을 지정할 수 있다.

차례대로 살펴보자.

먼저 첫번째 필드인 "Minute(분)" 필드이다. 가능한 값은 0 - 59이다.

두 번째 필드인 "Hour(시)" 필드이다. 가능한 값은 0 - 23이다.

세 번째 필드인 "Day(일)" 필드이다. 가능한 값은 1 - 31이다.

네 번째 필드인 "Month(달)"부터 살짝 복잡해진다. 가능한 값은 1 - 12인데 영어로도 입력할 수 있다.

숫자를 jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec으로 대체할 수 있다.

다섯 번째 필드인 "Day(일)"은 조금 더 복잡하다. 가능한 값은 0 - 7이며 영어로도 입력할 수 있다.

숫자와 영어의 의미는 아래와 같다.

  • 0(or 7), sun : 일요일
  • 1, mon : 월요일
  • 2, tue : 화요일
  • 3, wed : 수요일
  • 4, thu : 목요일
  • 5, fri : 금요일
  • 6, sat : 토요일

여섯 번째 필드 "사용자명"은 대괄호([])안에 들어갔음을 볼 수 있다.

이 값은 생략 가능한데 만약 /etc/crontab이나 /etc/cron.d에 저장될 경우 명시해줘야 한다.

즉, 파일명을 통해 크론 동작을 실행할 UID를 알 수 있는 /var/spool/cron에서는 명시하지 않아도 되는 것이다.

마지막 작업 명령은 실행할 명령을 한 줄로 쓰면 된다.

우리가 많이 쓰고 있는 "ls"같은 명령어도 되겠지만 크론 작업을 의미 있게 사용하기 위해선 주로 실행 스크립트를 만들거나 원하는 실행 명령 구문을 만들어야 한다.

/etc/crontab 내 특수 문자 및 문자열

특수문자

  • * : 모든 값에 매칭
  • a-b : 범위(a부터 b까지)
  • , : 특별한 값일 때만 동작
  • / : 시작시간 / 단위 순서로 입력

특수 문자열

특수 문자열은 앞 5개 항목(분, 시, 일, 월, 요일)을 1개 문자열로 대체할 수 있는 값이다.

  • @hourly : 매 시간 한번. 0 * * * *
  • @midnight, @daily : 매일 한 번. 0 0 * * *
  • @weekly : 매주 한 번. 0 0 * * 0
  • @monthly : 매달 한 번. 0 0 1 * *
  • @annually, @yearly : 매년 한 번. 0 0 1 1 *
  • @reboot : 리부트 될 때마다 실행

Cron 표현식은 이론만 알고 있다고 이해할 수 있는 영역이 아니기 때문에 아래 예시들을 보 한 번 직접 사용해 보며 느껴보자.

출처 : https://www.ibm.com/docs/ko/urbancode-release/6.1.0?topic=interval-cron-expressions-defining-frequency

출처 : https://www.ibm.com/docs/ko/urbancode-release/6.1.0?topic=interval-cron-expressions-defining-frequency

crontab 추가/수정

# 크론탭 추가
crontab [-u 사용자명] Cron표현식

# 크론탭 수정
crontab [-u Username] [Option]

Option

  • -u : 크론을 실행할 사용자명 입력
  • -l : 사용자의 crontab 내용 리스트화
  • -r : 사용자의 crontab 모두 삭제
  • -e : 입력하면 crontab 수정 창에 들어가는데 그 곳에 Cron 표현식을 입력 후 :wq를 통해 crontab 갱신

at

크론은 Cron 표현식에 따라 정해진 주기로 작업을 실행시키는 것이었다.

at은 주기적으로 작업을 실행시키는 것이 아닌 지정된 한 순간에만 실행될 작업을 예약하는 명령어이다.

사용 방법은 아래와 같다.

at [시간]

이때 시간을 "3:00am, 11:00pm" 등 직접 시간을 적어도 되며 "now +1 hours"와 같이 지금부터 1시간 후에 실행시키게 할 수도 있다.

이렇게 at과 시간을 입력하면 이후 "at>" 구문이 출력될 것이다.

"at>" 이후에 실행시키고 싶은 명령들을 모두 입력한 뒤 "Ctrl + D"를 통해 저장한다.

이후 지정한 시간이 된다면 설정했던 명령들이 모두 실행된다.

anacron

cron과 유사하지만 시스템이 꺼져 있을 경우 해당작업이 정해진 시간에 수행되었는지를 확인한 뒤 수행한 적이 없으면 실행시킨다는 차이점이 존재한다.

즉, Cron과 같은 작업 스케줄러이지만 시스템이 계속 켜져있지 않아도 작동하는 것이다.

profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!

0개의 댓글