Crontab 기본
기본적으로 리눅스에는 crontab
이 설치 되어 있습니다.
$ crontab -e
crontab -e
는 현재 crontab
에 등록할 작업들을 편집하겠다라는 명령어 입니다. 해당 명령어를 입력하면 기본적으로 vim
으로 crontab
에 등록된 파일을 열어 주기 때문에 기존에 있던 스케쥴 내역에 추가로 스케쥴 할 내역을 추가하 실 수 있습니다. 처음 사용하시는 분들은 아무 내용이 없을 것입니다.
$ crontab -l
crontabb -l
은 현재 등록된 스케쥴 내역들을 cat
으로 쉘에 출력 되어집니다. 쉽게 등록된 내용이 무엇이 있는지 확인하기 위해서는 해당 명령어를 입력하면 쉽게 알아내실 수 있습니다.
$ crontab -r
crontab -r
은 현재 등록된 모든 스케쥴 내역들을 리셋하는 명령어입니다. 기존에 등록된 스케쥴 내역들을 모두 지우고나서 새롭게 쓰고 싶은 경우에 입력하시면 쉽게 리셋하실 수 있습니다.
crontab -u <User>
crontab
은 기본적으로 로그인한 유저의 권한으로 실행 되어집니다. 그렇기 떄문에 해당하는 유저의 권한으로 실행하기 위해서는 해당 유저로 변경해야합니다. 해당 명령어를 통해서 변경하시고 스케쥴을 등록하실 수 있습니다.
Crontab 포맷 형식
지금까지 crontab
에 기본 사용법에 대해서 알아 보았는데요. crontab
에 스케쥴링을 등록하기 위해서는 기본적인 형식이 있습니다. 형식에 대해서 알아보도록 하겠습니다.
기본적으로 crontab
편집창에서는 한줄에 한 스케쥴을 등록하도록 되어있습니다. 즉, 3줄이 씌여져 있다면 3개의 스케쥴링이 명시한 포맷대로 스케쥴링 되고 있는 상태라 생각하시면 됩니다.
그럼 스케쥴 하나에 대한 포맷형식에 대해서 알아보도록 하겠습니다.
대부분의 crontab
스케쥴들은 위와 같은 형식대로 작성이되어있습니다. 그럼 하나하나씩 확인해보도록 하겠습니다.
위와 같은 형태로 입력하시면 해당하는 명령어를 스케쥴대로 등록하실 수 있습니다. 분, 시간, 일, 월, 요일은 스페이스바를 기준으로 구분하기 때문에 사이사이는 스페이스로 띄워 주셔야합니다.
Crontab 예시
30 12 * * * /home/jshan/start.sh
위와 같은 경우에는 매일 12시 30분마다 /home/jshan/start.sh
을 실행하라라는 의미입니다.
12 * 5 * * /home/jshan/start.sh
위와 같은 경우에는 매월 5일에는 매시간 12분이 될 때마다 /home/jshan/start.sh
를 실행하라는 의미라 생각하시면 됩니다. 쉽게 이해가 되시나요?
다음은 조금 더 응용하는 방법에 대해서 알아 보도록 하겠습니다.
0 */3 * * * /home/jshan/start.sh
위와 같은 경우에는 0시를 기준으로 매 3시간 정각마다 /home/jshan/start.sh
를 실행하라는 의미를 가지고 있습니다.
5,15,30 * * * * /home/jshan/start.sh
위와 같은 경우에는 매시간 5분, 15분, 30분이 될때마다 /home/jshan/start.sh
를 실행하라는 의미입니다. 특정한 분마다 스케쥴링하고 싶으실때 사용하시면 되겠습니다.
5–30 * * * * /home/jshan/start.sh
위와 같은 경우에는 5, 6, 7, 8 …, 28, 29, 30분이 될때마다 /home/jshan/start.sh
를 실행하라는 의미입니다. 특정한 구간에 연속으로 작업을 해야하는 경우이용하시면 되겠습니다.
마치며
특정 행동을 하는 프로그래밍을 해놓고 정기적으로 스케쥴링이 필요할 경우에 유용한 crontab
에 대해서 알아보았습니다. 생각보다 자주 사용하는 명령어라 아시는 분들도 많을 수도 있지만 생각보다 모르시는 분들이 많아 글로 정리하게 되었습니다. 모두 유용하게 사용하실 수 있으셨으면 좋겠습니다!