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 |