코딩정보


● 리눅스 크론탭(Linux Crontab) 사용법


  • 링크


  • 컨텐츠 정보


    본문

    ● 리눅스 크론탭(Linux Crontab) 사용법

     오늘은 리눅스 크론탭에 대해 알아볼까 합니다. 음, 윈도우에서는 스케줄러와 비슷하다고 보면 되겠네요.

    "특정 시간에 특정 작업을 해야한다."

    라고 한다면 크론탭을 사용해 편하게 리눅스를 사용하실 수 있습니다.

    1. 크론탭 기본 (crontab basic)

    일단 기본이 되는 크론탭 사용법을 한 번 볼까요. 리눅스 쉘에서 다음처럼 입력합니다.

    $ crontab -e
    

    그러면 뭔가 편집할 수 있는 곳이 로딩됩니다. 이곳이 바로 크론탭을 설정할 수 있는 장소이죠. 여기에 각종 크론탭 명령어를 입력후 콜론(:) 입력 후에 wq 를 입력해 크론탭을 갱신시킵시다.

    반대로 현재 크론탭에 어떤 내용이 들어있는지 보려면 다음처럼 입력하세요.

    $ crontab -l
    

    그러면 cat 명령어로 파일을 읽어들인 것처럼 표준 출력으로 크론탭 내용이 나오게 됩니다. 그런데 만약(거의 없겠지만) 크론탭을 지우고 싶다면?

    리눅스 쉘에 다음처럼 입력합니다.

    $ crontab -r
    

    이렇게까지 하면 크론탭의 기본 설정 및 확인, 삭제에 대해 배운 것입니다. 그러면 실제로 크론탭에 크론 하나를 예제로 등록 해봅시다.

    다음처럼 crontab -e 입력 후 다음과 같은 내용을 입력합시다. 저장은 vi 처럼 콜론 (:) 입력 후 wq 로 갱신시켜주면 됩니다.

    * * * * * ls -al
    

    별이 다섯개나 있습니다. 그리고 뒤에는 명령어가 적혀 있네요. 이게 기본 사용법입니다. 물론 쉘스크립트 뿐만 아니라 리눅스 커맨드도 사용할 수 있습니다.여기서는 쉘스크립트를 사용하는 방법으로 설명하고 있습니다.

    별이 다섯개 있는 경우엔 "매분마다 실행" 하는겁니다. 별이 지칭하는 것이 무엇인지 자세히 살펴봅시다. * 그 전에 위에 입력했던 크론잡은 다시 지우시기 바랍니다.

    2. 주기 결정

    *      *      *      *      *
    분(0-59)  시간(0-23)  일(1-31)  월(1-12)   요일(0-7)
    

    각 별 위치에 따라 주기를 다르게 설정 할 수 있습니다. 순서대로 분-시간-일-월-요일 순입니다. 그리고 괄호 안의 숫자 범위 내로 별 대신 입력 할 수 있습니다.

    요일에서 0과 7은 일요일입니다. 1부터 월요일이고 6이 토요일입니다.

    3. 주기별 예제

    3.1. 매분 실행

    # 매분 test.sh 실행
    * * * * * /home/script/test.sh
    

    3.2. 특정 시간 실행

    # 매주 금요일 오전 5시 45분에 test.sh 를 실행
    45 5 * * 5 /home/script/test.sh
    

    3.3. 반복 실행

    # 매일 매시간 0분, 20분, 40분에 test.sh 를 실행
    0,20,40 * * * * /home/script/test.sh
    

    3.4. 범위 실행

    # 매일 1시 0분부터 30분까지 매분 tesh.sh 를 실행
    0-30 1 * * * /home/script/test.sh
    

    3.5. 간격 실행

    # 매 10분마다 test.sh 를 실행
    */10 * * * * /home/script/test.sh
    

    3.6. 조금 복잡하게 실행

    # 5일에서 6일까지 2시,3시,4시에 매 10분마다 test.sh 를 실행
    */10 2,3,4 5-6 * * /home/script/test.sh
    

     주기 입력 방법엔 * , - / 을 이용하는 방법이 있습니다. 위에서 보셨듯이 각각의 특수기호가 하는 기능이 다르고 조합을 어떻게 하느냐에 따라 입맛대로 주기를 설정 할 수 있습니다.

    4. 크론 사용 팁

    4.1. 한 줄에 하나의 명령만 씁시다.

    # 잘못된 예
    * * * 5 5
    /home/script/test.sh
    
    # 잘된 예
    * * * 5 5 /home/script/test.sh
    

    4.2. 주석을 달아봅시다.

    # 주석 #
    #--------------------#
    # 이것은 주석입니다. #
    #--------------------#
    

    # 을 입력해서 그 뒤로 나오는 모든 문자를 주석 처리할 수 있습니다.

    5. 크론 로깅 (cron logging)

    크론탭을 사용해서 정기적으로 작업을 처리하는 것은 좋은데, 해당 처리 내역에 대해 로그를 남기고 싶을 때가 있을겁니다. 그럴때 다음처럼 한번 써봅시다.

    * * * * * /home/script/test.sh > /home/script/test.sh.log 2>&1
    

    위처럼 작성하면 매분마다 test.sh.log 파일이 갱신 되어 작업 내용이 어떻게 처리 되었는지 알 수 있습니다. 만약 2>&1 을 제거하면 쉘스크립트에서 표준 출력 내용만 나옵니다. 2>&1은 이곳에서 확인합시다.

    그런데, 이게 너무 자주 실행 되고 또한 지속적으로 로깅이 되야 해서 로그를 계속 남겨둬야 한다면 다음처럼 입력합니다.

    * * * * * /home/script/test.sh >> /home/script/test.sh.log 2>&1
    

    그러면 계속 로그가 누적이 되는 것을 확인 할 수 있을겁니다. 대신 로그가 과도하게 쌓이면 리눅스 퍼포먼스에 영향을 주므로 가끔씩 비워주거나 파일을 새로 만들어주는 센스가 필요합니다.

    반대로 로그는 필요 없는 크론을 위해선 다음처럼 입력합니다.

    * * * * * /home/script/test.sh > /dev/null 2>&1
    

    6. 크론탭 백업 (crontab backup)

    자, 혹시라도 crontab -r 를 쓰거나 실수로 crontab 디렉토리를 날려버려서 기존 크론 내역들이 날아갔을때, 정말 황망할거 같은데 말이죠. 그러니 주기적으로 크론탭을 백업해 둡시다. 백업은 다음처럼 하는 방법이 있습니다.

    crontab -l > /home/bak/crontab_bak.txt
    

    크론탭 내용을 txt 파일로 만들어 저장해두는겁니다. 자, 이것도 자동화가 될 수 있을까요?

    50 23 * * * crontab -l > /home/bak/crontab_bak.txt
    

    처럼 하면 되겠죠? 매일 오후 11시 50분에 크론탭을 백업해두는 크론 명령어입니다. :)

    간단하게 크론탭에 대해 알아봤습니다. 혹시 추가해야 될 내용이나 실제와 다른 부분이 있다면 댓글 부탁드립니다.

    빈도 정의를 위한 CRON 표현식

    마지막 업데이트 날짜: 2021-03-08


    CRON 표현식을 사용하여 정의한 사용자 정의 간격으로 배치를 스케줄링하여 실행할 수 있습니다.
    표 1. 이 표는 배치 빈도를 사용자 정의하는 데 사용할 수 있는 CRON 표현식의 예를 제공합니다.
    CRON 표현식
    빈도


    0 0/5 * * * ?
    5분마다

    0 0 12 * * ?
    매일 낮 12시에

    0 15 10 ? * *
    매일 오전 10:15에

    0 15 10 * * ?
    매일 오전 10:15에

    0 15 10 * * ? *
    매일 오전 10:15에

    0 15 10 * * ? 2014
    2014년 동안 매일 오전 10:15에

    0 * 14 * * ?
    매일 오후 2:00에 시작해서 매 분마다 실행하고 오후 2:59에 끝남

    0 0/5 14 * * ?
    매일 오후 2:00에 시작해서 5분마다 실행하고 오후 2:55에 끝남

    0 0/5 14,18 * * ?
    매일 오후 2시에 시작해서 5분마다 실행되어 오후 2:55에 끝나고, 오후 6시에 시작해서 5분마다 실행되어 오후 6:55에 끝남

    0 0-5 14 * * ?
    매일 오후 2:00에 시작해서 매 분마다 실행하고 오후 2:05에 끝남

    0 10,44 14 ? 3 WED
    3월 동안 매주 수요일 오후 2:10과 오후 2:44에

    0 15 10 ? * MON-FRI
    주중 오전 10:15에

    0 15 10 15 * ?
    매달 15일 오전 10:15에

    0 15 10 L * ?
    매월 말일 오전 10:15에

    0 15 10 ? * 6L
    매월 마지막 금요일 오전 10:15에

    0 15 10 ? * 6L
    매월 마지막 금요일 오전 10:15에

    0 15 10 ? * 6L 2014-2017
    2014년부터 2017년까지 매월 마지막 금요일 오전 10:15에

    0 15 10 ? * 6 3
    매월 세 번째 금요일 오전 10:15에

    0 0 12 1/5 * ?
    해당 월의 첫날부터 시작하여 매월 5일 마다 평일 정오에

    0 11 11 11 11 ?
    11월 11일 오전 11:11마다


    ============== end


     https://11q.kr 에 등록된 자료 입니다. ♠ 정보찾아 공유 드리며 출처는 링크 참조 바랍니다♠1.png

    뷰PDF add1,add2



    관련자료

    댓글 3

    11qkr님의 댓글

    ● VMware ESXi 호스트 구성 백업 및 복원: 단계별 가이드 명령어 및 메뉴얼
    https://11q.kr/www/bbs/board.php?bo_table=co3&wr_id=180

    11qkr님의 댓글

    crontab 파일 표시
    crontab -l 명령은 cat 명령이 다른 유형의 파일 내용을 표시하는 것과 똑같은 방법으로 crontab 파일의 내용을 표시합니다. 이 명령을 사용하기 위해 디렉토리를 /var/spool/cron/crontabs(여기에 crontab 파일이 위치함)로 변경할 필요는 없습니다.

    기본적으로 crontab -l 명령은 자신의 crontab 파일을 표시합니다. 다른 사용자에 속하는 crontab 파일을 표시하려면 수퍼유저여야 합니다.

    crontab 파일을 표시하는 방법
    시작하기 전에

    root 또는 다른 사용자에 속하는 crontab 파일을 표시하려면 수퍼유저 또는 동등한 역할의 사용자여야 합니다.

    자신의 crontab 파일을 표시하기 위해 수퍼유저 또는 동등한 역할의 사용자일 필요는 없습니다.

    crontab 파일을 표시합니다.
    $ crontab -l [username]
    여기서 username은 crontab 파일을 표시할 사용자 계정의 이름을 지정합니다. 다른 사용자의 crontab 파일을 표시하려면 수퍼유저 권한이 필요합니다.

    주의
    주의 - 실수로 crontab 명령을 아무 옵션 없이 입력한 경우 편집기의 인터럽트 문자를 누르십시오. 이 문자는 변경 사항을 저장하지 않고 종료하도록 허용합니다. 대신, 변경 사항을 저장하고 파일을 종료한 경우 기존 crontab 파일이 빈 파일로 겹쳐 쓰입니다.

    예 8-2 crontab 파일 표시

    이 예는 crontab -l 명령을 사용하여 사용자의 기본 crontab 파일의 내용을 표시하는 방법을 보여줍니다.

    $ crontab -l
    13 13 * * * chmod g+w /home1/documents/*.book > /dev/null 2>&1
    예 8-3 기본 root crontab 파일 표시

    이 예는 기본 root crontab 파일을 표시하는 방법을 보여줍니다.

    $ suPassword:
    Oracle Corporation  SunOS 5.10      Generic Patch  January 2005
    # crontab -l
    #ident  "@(#)root      1.19    98/07/06 SMI"  /* SVr4.0 1.1.3.1      */
    #
    # The root crontab should be used to perform accounting data collection.
    #
    #
    10 3 * * * /usr/sbin/logadm
    15 3 * * 0 /usr/lib/fs/nfs/nfsfind
    30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean
    #10 3 * * * /usr/lib/krb5/kprop_script ___slave_kdcs___
    예 8-4 다른 사용자의 crontab 파일 표시

    이 예는 다른 사용자에 속하는 crontab 파일을 표시하는 방법을 보여줍니다.

    $ su
    Password:
    Oracle Corporation  SunOS 5.10      Generic Patch  January 2005
    # crontab -l jones
    13 13 * * * cp /home/jones/work_files /usr/backup/. > /dev/null 2>&1
    https://docs.oracle.com/cd/E24846_01/html/E23088/sysrescron-12.html



    ♥간단_메모글♥


    최근글


    새댓글



    PHP 안에 HTML ☞ 홈페이지 화면갱신 시간은 ♨
    ▶ 2024-04-20 20:31:48

    오늘의 홈 현황


    • 현재 접속자♨ 188 명
    • 오늘 가입자※ 2 명
    • 어제 가입자※ 7 명
    • 주간 가입자※ 15 명
    • 오늘 방문자 1,969 명
    • 어제 방문자 2,250 명
    • 최대 방문자 13,042 명
    • 전체 방문자 4,280,877 명
    • 전체 게시물※ 8,521 개
    • 전체 댓글수※ 24,486 개
    • 전체 회원수 10,914 명

    QR코드


    ☞ 사진기로 촬영하시면 방문링크 됩니다

    알림 0








    최신글↑