Cron이란?

지정된 시간에 지정한 업무를 해 주는 프로그램으로, 주로 리눅스 운영체제에서 많이 사용한다. 

cron에 등록된 업무들은 cron 디렉토리 내부의 파일에 저장된다.

 

cron 디렉토리

/var/spool/cron/crontabs 또는 /var/spool/cron/

 

그러나 cron으로 등록된 업무를 추가, 수정 및 변경하고 싶다면 직접 파일을 변경해서는 안 된다. 터미널에서 crontab 이라는 명령어를 사용해서 변경하자. 

 

 

cron 파일의 구성

cron 파일은 명령어, 환경설정, 주석 이렇게 세 종류의 라인으로 구분된다. 

 

cron 스케줄링

cron에 업무를 등록해서 수행하게 하려면, 어떤 시간에 어떤 업무를 수행할지 알려주어야 한다. 

{분 시간 일 월 요일} {수행할 업무가 저장된 파일 경로}

 

분, 시간, 일, 월, 요일은 모두 숫자로 작성하고, 파일 경로는 해당 cron shell의 경로에서 상대 경로로 입력한다. 

- 분: 0-59

- 시간: 0-23

- 일: 1-31

- 월: 1-12

- 요일: 0-7 (일요일이 0 또는 7이다)

 

-,를 사용해서 각 필드를 연속된 값, 또는 각각 떨어진 값들로 지정하는 것도 가능하다. 

0 0 1,2 * *		# 매월 1일과 2일 정각에 실행
0 0 * * 1-3		# 매주 월, 화, 수 정각에 실행

 

매번 진행하다 보면 cron 실행 시간이 유효하지 않을 수 있다. 

ex) 매월 31일에 실행했을 때, 6월 31일은 없다. 

이 경우, 유효하지 않은 경우는 업무를 진행하지 않는다. 

즉 매월 31일에 실행한다고 입력하면 실제로는 2, 4, 6, 9, 11월에는 업무가 실행되지 않는다. 

 

crontab 명령어 사용법

1) 변경

해당 명령어 뒤에 변경할 내용을 입력하면 그대로 변경된다. 

$ crontab -e

2) 현재 명령어 보기

cron에 등록된 명령들을 변경하지 않고 조회만 할 수 있다. 

$ crontab -l

3) 삭제

현재 접속한 유저 계정으로 등록된 모든 cron 명령들을 삭제한다. 

$ crontab -r

4) (root 유저로 접속 시) 다른 유저의 crontab 업무 변경/조회/삭제

$ crontab -u certainUser -e		# 변경
$ crontab -u certainUser -l		# 조회
$ crontab -u certainUser -r		# 삭제

 

cron 주석(comment)

여느 프로그래밍 언어처럼 cron 파일에도 부가적인 설명 등을 추가할 수 있는 주석 기능이 있다. 

주석은 라인 단위로만 달 수 있고, 라인 중간부터 주석을 선언하는 것은 불가능하다. 

주석을 달려면 해당 라인의 첫 문자를 # 으로 시작하면 된다. 

 

cron 환경설정

cron 프로그램의 실행에 관여하는 환경변수를 설정하거나, 기존 환경변수의 값을 바꿀 수 있다. 

cron 파일은 위에서부터 아래로 읽기 때문에, 처음부터 어떤 변수를 특정 값으로 정해 두고 싶다면 해당 환경설정 명령어를 맨 윗 줄에 위치시키면 된다. 

 

✔️SHELL

cron 프로그램이 작동하는 shell의 위치를 저장한 변수이며, 기본값은 /bin/sh 으로 설정되어 있다. 

$ SHELL = /bin/sh

 

✔️MAILTO

cron 프로그램은 등록한 작업을 수행하면 기본값으로 해당 작업을 등록한 유저의 계정으로 메일을 보내도록 되어 있다. 

MAILTO = {해당 유저의 메일 주소}로 되어 있다. 

만약 메일을 받고 싶지 않다면 MAILTO = "" 으로 바꿔 주자. 

 

그런데 메일을 안 받으면 수행된 cron 작업에 대한 메시지는 저장되지 않고 사라진다. 

따라서 다른 방법을 사용하는 것이 일반적이다. 

 

1. cron 업무 기록을 파일에 저장하기

(1) overwrite - 덮어쓰기

{cron 작업 내용} echo "메시지" > 저장할 파일명.log

0 * * * * echo "Hourly message." > message.log

해당 파일의 내용을 덮어쓴다. 해당 cron 업무가 이후에 또 수행되면, 해당 파일의 내용을 새 기록으로 대체한다. 

따라서 cron 업무 내용을 누적해서 기록하고 싶다면 덮어쓰기보다는 이어서 쓰는 것이 좋다. 

 

(2) append - 이어쓰기

{cron 작업 내용} echo "메시지" >> 저장할 파일명.log

0 * * * * echo "Hourly message." >> message.log

 

2. cron 업무 중 오류가 난 경우만 파일에 저장하기

{cron 업무 내용} > /dev/null

/dev/null 은 특정 경로라기보다는 리눅스 운영체제에만 있는 특별한 종류의 파일이다. 해당 파일에 기록된 내용은 기록된 즉시 바로 삭제된다. 그러므로 사용자는 오류가 난 경우가 아니면 알림이나 기록을 받지 않을 수 있다. 

 

 

참고한 포스트

Working with Cron Jobs - HostDime Knowledge Base

 

'server-side > server' 카테고리의 다른 글

Mac 환경설정  (0) 2024.07.15
Software Release Life Cycle  (0) 2023.07.15
OAuth 2.0 기본원리  (0) 2022.09.26
인증(Authentication)  (0) 2022.07.14
Git: clone, single-branch, checkout  (0) 2022.06.28

+ Recent posts