본문 바로가기

OS/Linux

[linux] cron을 이용한 예약 작업 (crontab)


* Ubuntu 12.04 LTS 서버를 기준으로 작성되었습니다.


cron이란 리눅스에서 특정한 시간에 반복된 작업을 하기위한 것 이다.

cron은 crontab 이란 명령어를 통해서 등록, 삭제를 하게 되는데

콘솔창에서


$ crontab -e


을 치면 다음과 같은 화면을 볼 수 있다.

# 위에 써있는 설명 생략

# m h dom mon dow  command

화면이 뜨기전에 보통은 어떤 에디터로 편집할것인지 묻는게 나오기도 하는데 본인은 그냥 vi에디터를 선택하였다.

위 화면에서 이제 주기적으로 실행할명령을 둘재줄에 보이는 형태대로 추가 해주면 된다.

m은 분, h는 시간, dom 은일, mon은 월 dow는 주 를 뜻한다. command는 실행할 명령.

01 04 * * * /usr/bin/somedirectory/somecommand

위의 형태로 추가를 하게 된다.


위 명령의 의미는 '매일 오전 4시 1분에 어떠한 명령을 실행하라' 가 된다.

*은 순서대로 매분, 매시간, 매일, 매달, 매 주를 의미한다.

혼동하면 안되는 것이 0 4 * * * 로 하면 4시간 마다가 아닌 매일 오전 4시이고 4 * * * * 는 4분마다가 아닌 매시간 4분을 가리킨다.


1 4* * * : 매일 오전 4시 1분에 실행하라

1 * * * * : 매시 1분에 실행하라.(1시간 간격)

* * * * * : 1분에 한 번씩 실행하라

1 4 2 * * : 매달 2일 오전 4시 1분에 실행하라.


만약 매분마다, 혹은 매 시간마다 실행하는 형태로 하고 싶다면? '/'를 이용하여 구분 할 수 있다


*/1 * * * * : 1분 마다 실행하라

0 */3 * * * : 3시간 마다 실행하라


또한 ',' 를 이용하여 실행되는 시간을 여러면 지정할 수 있다.


1 4,22 * * * : 오전 4시 1분, 오후 10시 1분에 실행하라

1 4 * * 0,2 : 매주 일요일과 화요일 4시 1분에 실행하라


EX> 위 사항을 가지고 apache의 htdocs를 백업 하는 예


1. 백업 스크립트 작성

#!/bin/sh

today=$(date +%Y%m%d)


tar cvf /usr/backup/bakcup-docs-$today.tar /opt/lamp/apache2/htdocs


파일 명 /usr/bin/reserve/backup.sh


2. crontab 등록

$ crontab -e



#매일 오후 10시에 백업

0 22 * * * /usr/bin/reserve/backup.sh 

crontab: installing new crontab

이란 메세지가 뜨면서 예약 작업이 동작을 한다.


다른 방법으로는

/etc/폴더 아래에 있는 crontab 파일을 직접 편집해 주는 방법도 있다.

등록방법은 동일하며 한가지 주(dow)와 명령어를 입력하는 부분 사이에 해당 명령을 실행시킬 user 를 명시해 주어야 한다.

crontab -e 를 이용해 등록한 예약작업은 기본적으로 해당 유저가 명령어를 실행하는 것으로 등록되기에 user를 명시해 주는 부분이 빠진것.


또한

/etc/cron.allow

/etc/cron.deny

파일을 만들어 cron을 사용할수 있는 유저와  사용이 불가능한 유저를 구분할 수 있다. 각각의 파일에 user의 ID를 넣어주면 된다.

우분투에서는 기본적으로 저 두파일이 존재하지 않기에 필요할때 만들어서 사용해야 한다.

우분투는 두 파일이 존재하지 않을 시 모든 유저에게 cron사용이 허용된다.


그리고 매월, 매주, 매일, 매시 마다 실행되는 예약작업을 지정하는 폴더가 기본적으로 존재 하는데

/etc/ 폴더 아래에 각각

cron.daily

cron.hourly

cron.monthly

cron.weekly

의 폴더가 있다. 이 폴더 밑에 스크립트 파일을 두면 각각의 주기에 맞춰 자동으로 폴더 밑의 스크립트들이 실행된다.


마지막으로 크론탭의 옵션은

-e : 크론탭 수정

-r : 등록된 작업 모두 삭제

-l : 등록된 작업 리스트 보여주기

-i : 위 명령에 붙여서 (ex -ir)사용하며 동작 전에 질문하기

가 있다.