• crontab 옵션
    crontab [ -u user ] file
    crontab [ -u user ] { -l | -r | -e }
    -u user : user 사용자에 대해서 crontab 작업을 수행한다. 생략하면 crontab 명령을 실행하는 사용자에 대해서 crtontab 작업을 수행.
    -l : 현재 cron table을 보여 줌
    -r : 현재 cron table을 삭제
    -e : 현재 cron table을 편집

    일반적으로  crontab -e 명령을 주로 사용한다.

  • crontab 사용 권한 : /etc/cron.allow, /etc/cron.deny
    특정 사용자에게만 cron의 사용을 허가할 경우
    /etc/cron.allow 파일에 허가할 사용자만 추가해준다
    /etc/cron.deny 파일에 허가하지 않을 사용자를 추가한다
    /etc/cron.allow를 먼저 참조한다.
    /etc/cron.allow에 명시된 사용자는 cron job을 실행할 수 있다.
    /etc/cron.allow에 없는 사용자는, /etc/cron.deny에도 없다면, cron job을 실행할 수 있다.
    /etc/cron.allow, /etc/cron.deny 두 파일이 존재하지 않으면 슈퍼 유저만 cron job을 수행할 수 있다.
    /etc/cron.deny 파일이 존재하고 아무 내용 없이 비어 있다면, 모든 사용자가 cron job을 수행할 수 있다.
  • cron table의 각 필드
    +-------------------------------------------------------------------+
    | 분 | 시간 | 날짜 | 달 | 요일 | 사용자 | 명령 |
    +-------------------------------------------------------------------+
    minute(0~59) hour(0-23) day(1-31) month(1-12) weekday(1-7) command

    <분>은 0-59  <시>는 0-23  <날짜>는 0-31  <달>은 0-12(0또는 12는 12월, 1은 1월…) <요일>은 0-7(0과 7은 일요일, 1은 월요일…)

    '*'  :  everytime
    '-'  :  범위 지정, 예를 들어 시간 필드에 1-3이면 1시와 3시 사이
    ','  :  separator, 예를 들어 시간 필드에 1,3이면 1시와 3시
    /   :  시간필드 에서 23-7/2라면 23시부터 07시까지 매 2시간마다라는 의미
          분필드에서 */2라면 매 2분마다라고 해석하면 된다.

  • 사용 예
    30  05 *  *  1    ~/bin/backup.sh
                  ==> 매주 월요일  오전 05시 30분에 ~/bin/backup.sh을 실행
    30  2  1  *  *    ~/bin/backup.sh
                  ==> 매월 1일 새벽 2시 30분에 ~/bin/backup.sh를 실행
    20  1  *  *  *    find /tmp -atime +3 -exec rm -f () ';'
                  ==> 매일 새벽 01시 20분에 3일간 접근하지 않은 /tmp내의 파일을 삭제                                  
  • 00 6 1-31/3 * * /usr/bin/rsync -avr --delete test.net::test /home/test 2> /tmp/rsyncError.txt
  •               ==> 3일에 한번씩 새벽 6시에 rsync
  • cron 세부 설정(특정 요일만 빼기)
  • 분,시,날짜,달,요일 별로 자유로이 정기적이고 주기적인 작업예약이 가능한 명령어 cron은 System-V 환경에서 일하는 서버관리자라면
    누구나 쓰고 있는 편리한 명령이다.

    하지만 System-V 환경에서 cron문법의 약점중 하나가 '매달 세번째 월요일' 과 같은
    경우는 표시할수 없다는 점이다.

    그러나 불가능은 없는법, 유닉스 파워툴의 공동저자중 한명인 Greg Ubben씨가 다음과 같은
    방법을 제안했다. (당연히 유닉스 파워툴에서
    참조했다.)

    -----------------------------------------------------------------
    12
    5 15-21 * * test `date +%a` != Mon &&
    /usr/local/etc/mtg-notice
    -----------------------------------------------------------------

    일본어나 한국어
    환경에서는 %a옵션이 한자나 한글로 뜨므로 위의 예문 그대로 하면 좀 문제가 생긴다. 고로 %a대신 %u를 사용하고 비교문을 살짝 수정할 필요가
    있다.

    내 서버에 수정, 반영한 소스는 다음과 같다.
    12 5 15-21 * *
    test `date +%u` == 1 && /usr/local/etc/command

    매달 세번째 요일들 중에서
    '월요일' 만 빼고 매일 실행할 경우에는 다음과 같은 수정으로 가능하다.

    12 5 15-21 * * test `date +%u`
    == 1 || /usr/local/etc/command

  • cron

    답글 남기기

    이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다