시스템을 운용하다보면 정기적으로 수행해야하는 일이 생기는데 이 때 사용하는 것이 Cron이라는 프로그램이다.
crontab- e
위 명령어를 linux 쉘에 입력하면 에디터가 뜨는데 여기에 정기적으로 하고자 하는 일을 정의할 수 있다.
또한 다음과 같은 라인을 볼 수 있다. 이는 어떻게 적으면 되는지 간단하게 설명한 것이다.
m h dom mon dow command
m : 분
h : 시
dom : 월 기준 일
mon : 월
dow : 월 기준 요일
command : 명령어 (수행할 작업을 이곳에 적는다)
크론 표현식에는 총 6항목이 있는데 항목은 왼쪽부터 순서대로 다음과 같다.
위 내용을 알맞게 적기 위해서는 간단한 이해가 필요하다. 먼저 표를 살펴보자
필드 | 허용값 | 허용 특수문자 |
---|---|---|
초 | 0 ~ 59 | , - * / |
분 | 0 ~ 59 | , - * / |
시 | 0 ~ 23 | , - * / |
일(Day Of Month | 1 ~ 31 | , - * / L W |
월 | 1 ~ 12 || JAN ~ DEC | , - * / |
요일 | 0 ~ 6 또는 SUN ~ SAT | , - * / L # |
년 | 1070 ~ 2099 | , - * / |
특수문자 | 의미 |
---|---|
* | 모든 값 |
? | 특정값 없음 |
- | 범위를 지정함 |
, | 여러 값 |
/ | 증가 값을 지정(초기 / 증가) |
L | 마지막 값 지정 |
W | 가장 가까운 평일 |
# | 몇 번째 무슨 요일인지 지정 |
강의 내에서는 다음과 같은 Cron식을 추가했다.
*/1 * * * * date >> date.log
위 내용은 매 분마다 date를 date.log에 저장한다는 의미이다. 위 내용을
crontab- e
에 적으니 쉘에서는 아래와 같이 crontab을 설치중이라는 문장을 출력해준다.
installing new crontab
예제에서는 -e 옵션을 주었지만 다른 옵션도 추가로 설명해보겠다.
Options:
-u <user> define user
유저를 정의한다.
-e edit user's crontab
유저의 crontab을 수정한다.
-l list user's crontab
유저의 crontab 리스트를 보여준다.
-r delete user's crontab
유저의 crontab을 삭제한다.
-i prompt before deleting
삭제전 확인을 한다.
-n <host> set host in cluster to run users' crontabs
클러스터의 호스트가 크론탭을 실행하도록 설정
-c get host in cluster to run users' crontabs
크론탭을 실행하는 클러스터의 호스트를 불러온다
정기적으로 해야되는 일들은 많이 있는데 강의에서는 하나의 사례를 소개해주었다.
웹페이지에 사용자가 입력하는 양식이 있다. 그리고 전송을 눌러 서버로 양식을 전송을 하면 서버가 사용자가 보낸 정보를 받아 정보를 보낸이가 10만명이 될 때까지 기다렸다가 10만명이 다 찰 때, 새로운 글이 등록되었다는 회신과 함께 글을 등록한 모든 사용자들에게 이메일을 보내는
프로그램이 있다라고 하자. 1명 당 회신 + 이메일을 보내는데0.1s가 걸린다면 이 프로그램은 좋은 프로그램이 아닐 것이다.
사용자가 정보를 전송하면 서버쪽 컴퓨터에는 전송이 되었다(SAVED
)상태를 저장하고 이를 곧바로 회신해준다. 그리고 서버에 설치된 CRON이 정기적으로 컴퓨터의 SAVED
정보가 추가되었다면 그 정보를 주기에 맞춰 BACKGROUD로 100,000개의 이메일을 보내는 작업을 사용자에게 보내는 작업을 진행하면 사용자는 오래 기다릴 필요가 없어진다.
생활코딩, 리눅스(정기적 실행 1, 2) - https://opentutorials.org/module/2538/14218