리눅스에서는 Cron 데몬(crond)이 주기적인 작업의 실행을 처리한다. 이 cron은 매분마다 설정파일인 Crontab(크론탭)을 해석하고, 그에 맞게 적절한 명령을 실행한다. 이번에는 이 설정파일인 Crontab이 무엇인지, 어떻게 사용하는지에 대해 정리해보려 한다.
$ crontab {-e | -l | -r}
crontab 명령어에서 주로 사용하는 옵션은 위 3가지이다. crontab 설정파일은 기본적으로 사용자마다 하나씩 가지며, crontab
명령어로 해당 설정파일을 조작하는 것이다.
$ crontab -e
-e
옵션을 준다면, crontab을 수정할 수 있는 편집기가 실행된다. 해당 편집기에 명령어를 입력함으로써, 설정파일을 수정할 수 있다.
$ crontab -l
크론탭의 내용물을 보려면 -l
옵션을 주면 된다.
$ crontab -r
크론탭의 내용을 삭제하려면 -r
옵션을 주면 된다.
$ crontab -u <사용자 id> {-l | -r | -e}
루트 사용자의 경우 -u <사용자 id>
옵션을 줌으로써 해당 사용자의 crontab 설정파일을 조작할 수 있다.
* * * * * echo "Hello World!"
crontab
명령어를 통해 수정하는 crontab 파일은 위와 같은 형식으로 명령어를 작성할 수 있다.
앞의 별 다섯개 부분은 명령을 실행할 주기를 설정하는 부분이고, 그 뒷부분에 실행하고 싶은 명령을 적어주면 된다.
* * * * * echo "Hello World!"
* * * * * /home/test/scripts/test.sh
명령이 짧은 경우 위 예시(echo "Hello World!
)처럼 명령을 직접 입력해주어도 된다. 그러나 명령이 두줄 이상인 경우 스크립트 파일을 작성해서 실행하는게 일반적이다.
* * * * * 명령
분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-7)
주기를 설정하는 5개의 별은 위와 같은 단위를 가진다.
요일의 단위는 0과 7은 일요일, 1부터 6까지는 월부터 토요일이다.
* * * * * 명령
해당하는 위치에 별이 있는 경우 매 단위마다 실행한다는 소리이다. 즉, 위의 예시에서는 매분마다 명령을 실행한다.
2 * * * * 명령
만약 위처럼 숫자를 직접 집어넣으면, 해당 단위일 때 실행을 한다. 주의할 점은 마다가 아니라 때이다. 위 예시에서는 매시간 2분이 될 때 명령을 실행한다.
* 2 * * * 명령
위 예시에서는 매일 2시가 되면, 2시부터 2시 59분까지 매분마다 실행한다.
* * * * 0 명령
요일의 경우도 마찬가지로 위 예시에서는 매주 일요일마다 명령을 실행한다.
2,10,30 * * * * 명령
쉼표를 넣어줌으로써 여러개의 시간을 지정해줄 수 있다. 위 경우 매시간 2분, 10분, 30분에 명령을 실행한다.
2-10 * * * * 명령
위처럼 하이픈(-)으로 숫자를 설정해주면, 왼쪽 숫자부터 오른쪽 숫자까지의 모든 단위마다 명령이 실행된다.
위 경우는 매시간 2분부터 10분까지 매분마다 명령을 실행한다.
*/10 * * * * 명령
위처럼 */간격
의 형태로 넣어주면, 해당 간격마다 명령이 실행된다.
위 경우는 매 10분마다 명령을 실행한다.
우리가 crontab
명령어를 통해 수정하는 crontab 파일들은 /var/spool/cron/crontabs
디렉토리에 각 사용자이름으로 저장이 된다.
해당 디렉토리를 보면, 위처럼 사용자명으로 crontab 파일이 저장되어 있다.
각 파일들에는 해당 사용자가 crontab -e
명령으로 작성한 내용들이 들어간다. 해당 파일을 그냥 수정해도, crontab
명령어를 쓰는 것과 같은 일을 한다...
그런데, 사실 이 디렉토리 말고도 crontab이 저장되는 곳이 여럿 있다.
/etc/crontab
해당 crontab 파일은 시스템과 관련되어 주기적으로 실행해야할 명령을 위한 설정파일이다. 해당 파일을 crontab
명령어로 접근할 수 없으며, root 사용자가 직접 명령을 설정하는 파일이다.
또한 해당 파일을 보면, 위처럼 /etc/cron.단위
형태의 명령을 실행하는 것을 볼 수 있다.
해당 디렉토리들에는 특정 주기마다 실행해야하는 스크립트들이 담겨져있다. 위 디렉토리는 etc/cron.daily
인데 해당 디렉토리 안에 내가 원하는 스크립트를 넣으면, 매일마다 실행이 된다.
# m h dom mon dow user command
그리고 위 /etc/crontab
파일에서 특이한 점이 있다. 주석부분을 보면 user
라는 곳이 있고, 실제 명령어에서도 root
로 사용자가 명시되어 있다. 이는 etc/crontab
이 /var/spool/cron/crontabs
와는 다르게 사용자별로 파일이 나누어진게 아니기 때문이다.
그래서 명령어를 적어줄 때, 어떤 사용자의 권한으로 command를 실행할 것인지 적어주는 것이다.