만약 특정 시간마다 실행 혹은 특정 주기마다 시켜야 하는 스크립트가 있다고 하면 어떻게 할까? 이런 상황을 위해 리눅스에서는 crontab을 지원한다. 이는 윈도우의 스케줄러와 유사하다.
Crontab은 특정 시간에 특정 작업을 하기 위해 사용한다.
만약 현재 시간의 로그를 찍는 test.sh를 cron으로 관리한다고 해보자. 일단 쉘 스크립트를 작성해야한다. test.sh 를 작성해보도록 하자.
echo `date` >> /root/log.txt
>> 라는 리다이렉션을 통해 계속 log 파일에 현재 시간에 대한 로그를 추가하겠다.
crontab -l
이 명령어를 사용할 경우 해당 파일의 내용을 cat 명령어로 확인하는 것처럼 작업 내역을 보여준다.
$crontab -l
crontab -e
$crontab -e
# crontab을 편집할 수 있도록 vi 에디터가 활성화 된다.
* * * * * ./test.sh # 편집을 통해 실행 시킬 crontab 설정
crontab -r
현재 설정된 모든 작업을 삭제하기 때문에 실행할 때 매우 조심해야 한다. 내가 설정하지 않은 crontab 작업이 있을 수 있기 때문에 실무에서는 지양하는 편이 좋다고 한다.
그렇다면 어떤 방법을 통해 크론탭을 삭제해야 할까?
매우 간단하다. 내가 설정한 crontab의 내용 앞에 주석(#) 처리 를 해주거나 해당 내용을 비워두면 된다.
각 별의 위치마다 분 - 시간 - 일 - 월 - 요일 순이다.
요일에서 0과 7은 일요일이고 1부터 6은 토요일이다.
만약 root에 있는 test.sh 를 cron으로 관리한다고 할 때 주기별로 어떻게 써야할 지 설정해보자.
* * * * * ./test.sh
매주 월요일 오전 1시에 실행할 경우
0 1 * * 1 ./test.sh
매일 오전 1시부터 30분까지 매분 실행
0-30 1 * * * ./test.sh
매 10분 마다 실행
*/10 * * * * ./test.sh
해당 파일의 내용을 cron 창에 다 적어두는 것이 아니라 파일의 경로를 적어줘서 실행 시키는 것이 좋다.
* * * * echo `date` >> /root/log.txt
* * * * * ./test.sh
*/10 * * * *
./test.sh
*/10 * * * * ./test.sh