《서브버전을 이용산 실용적인 버전 관리》라는 책과 《실용주의 프로그래머를 위한 빌드 자동화》라는 책을 읽고 있다. 서브버전을 제대로 사용하려면 책을 한 번은 꼭 봐야 한다고 생각하고 있었는데, 역시나 보니 도움이 되었다. 서브저전의 구조, CVS와의 차이 등에 대해 잘 알 수 있었다. CVS2SVN이란 프로그램도 있다고 한다.(횡설수설이군)

여튼간에, 오늘은 재밌는 것을 알게 됐다. 빌드 자동화… 나 같은 웹 프로그래머에게는 얼마나 필요한지 모르겠다는 생각이 들기도 했으나, 여튼간에 알아 두면 편리할 것 같은 게 생겼다. 바로 매일밤 svn에서 자동으로 export를 실행하도록 만든 것이다. 이런 걸 빌드 자동화라고 하나보다 싶었다.

그런 예약작업에는 짧은 스크립트가 사용된다. 나도 짧은 스크립트를 만들었다. 내용은 아래와 같다.

파일명은 svn_export.sh로 했다. 참고용으로 svn_export.sh의 내용도 넣어 둔다. cron과 관련된 내용은 아니니까 아래 명령줄을 이해할 필요는 없다.

#!/bin/sh
svn export file:///home/mytory/svn-repos/myProject/trunk /var/www/myProject --force

예약작업 등록하기

예약작업을 등록하기 위해 등록 페이지를 켰다. crontab -e가 바로 크론에 예약작업을 등록하기 위한 명령어다. 크론의 예약작업에도 권한이 있다. 만약 관리자 권한이 필요한 작업을 크론이 해야 한다면 sudo crontab -e라고 써 줘야 한다. 이번 작업은 관리자 권한이 필요없는 작업이니 sudo 없이 했다. (/var/www가 관리자 권한이 필요 없다고? 하는 분들 있을지 모르겠다;; 소유권 이전했다.)

crontab -e

명령어를 치면 어떤 에디터를 쓸 거냐고 묻기도 한다. nano를 추천한다고 씌어 있었다. 그래서 그걸 썼다. 사용하기 쉬웠다.

거기에 아래처럼 적어 줬다.

0 5 * * * /home/mytory/svn_export.sh

위처럼 적으면 매일 5시에 home/mytory/svn_export.sh 를 실행하라는 말이다.

첫 번째 0은 몇 분에 실행할 거냐를 지정해 주는 거다. 0이라고 쓰면 0분에 실행한다. 5라고 실행하면 5분에 실행한다. 혼동하지 말아야 할 것은 ‘5분마다’ 실행하는 게 아니라 5분에 실행한다는 점이다. (*을 적으면 매분, 즉 1분마다 실행하는 게 된다.)

두 번째 5는 5시에 실행하라는 거다. 역시 5시간마다 실행하라는 게 아니다. 역시 *을 적으면 매시간마다, 즉 1시간마다 실행하라는 게 된다.

세 번째 *은 매일 실행하라는 뜻이 된다. 만약 여기 5를 적으면 5일에 실행하라는 뜻이 된다. 한 달에 한 번 실행하고 싶다면 여기 숫자를 적는다.

네 번째 *은 매달 실행하라는 뜻이 된다. 만약 여기 1을 적으면 1월에 실행하라는 뜻이 된다. 1년에 한 번만 실행할 게 아니라면 당연히 *을 적어야 할 거다.

다섯 번째 *은 요일에 관한 거다. 0~6 사이의 숫자를 입력한다. 0은 일요일, 6은 토요일이다. 매주 수요일에 실행하고 싶으면 3이라고 적는다.

그래서 다섯 개의 숫자 혹은 별을 조합하면 cron이 언제 이 명령을 실행해야 하는지가 나오는 거다. 예를 몇 개 들어 보자.

  • 0 5 * * * : 매일 5시 0분에 실행.
  • 5 * * * * : 매시 5분이 될 때마다 실행. 즉, 한 시간 간격으로 실행.
  • * * * * * : 1분에 한 번씩 실행.
  • 0 5 1 * * : 매달 1일 새벽 5시에 실행.

그럼 5분에 한 번씩 혹은 5시간에 한 번씩 실행하고 싶으면 어떻게 적어야 하는가? 아래처럼 적는다.

  • */5 * * * * : 5분에 한 번씩
  • 0 */5 * * * : 5시간에 한 번씩

물론 저 뒤에 실행할 스크립트 경로를 적어 줘야 한다는 점을 잊으면 안 된다.

마지막으로.

  • 0 5,11 * * * : 새벽 5시와 밤 11시.
  • 0 5,11 * * 0,3 : 매주 일요일과 수요일 새벽 5시와 밤 11시.

이렇게 적으면 된다.

마치며

자동화는 좋은 것이다. 인간을 고된 반복노동에서 해방시켜 창조적인 활동을 할 수 있도록 도우니까 말이다.

참고

위키피디아의 cron 설명