작업 자동화를 위한 크론탭을 알아보자

DongHwan·2021년 9월 19일
0
post-thumbnail

리눅스에서는 Cron 데몬(crond)이 주기적인 작업의 실행을 처리한다. 이 cron은 매분마다 설정파일인 Crontab(크론탭)을 해석하고, 그에 맞게 적절한 명령을 실행한다. 이번에는 이 설정파일인 Crontab이 무엇인지, 어떻게 사용하는지에 대해 정리해보려 한다.

bash 명령어

$ 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 설정파일을 조작할 수 있다.

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 명령어를 통해 수정하는 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를 실행할 것인지 적어주는 것이다.

profile
날 어떻게 한줄로 소개해~

0개의 댓글