주:

Crontab 유틸리티를 사용하여 Oracle Linux에서 작업 예약

시작하기 전에

이 사용지침서에서는 Oracle Linux에서 crontab 명령을 사용하는 방법을 보여줍니다.

배경

Oracle Linux는 프로그램을 예약된 작업 또는 작업으로 자동으로 실행할 수 있습니다. /etc/cron*에서 cron 구성을 편집하여 시스템 레벨 작업으로 실행되도록 프로그램을 예약하거나 사용자 crontab 내에서 작업으로 실행되도록 프로그램을 예약할 수 있습니다. 시스템에 대한 시스템 관리자 액세스 권한이 없거나 예약하려는 프로그램이 사용자 계정과 관련된 경우 crontab 유틸리티는 사용자의 고유 사용자 자격 증명에 따라 정기적으로 프로그램을 실행할 수 있는 적절한 방식을 제공합니다. crontab을 사용하면 작업을 1분마다 또는 1년에 한 번만큼 자주 실행하도록 예약할 수 있습니다. 그러나 작업이 실행되도록 예약된 시간 동안 시스템이 작동 중지된 경우 cron 작업이 실행되지 않습니다.

cron 구성은 대부분의 Linux 시스템에서 표준이며 1975년부터 Unix와 유사한 시스템에서 사용할 수 있었습니다. 더 복잡한 스케줄링 솔루션은 타이머 형태로 Systemd에 포함되어 있으며 사용자는 Systemd 타이머를 더 깊이 탐색하여 특정 요구 사항을 해결하는 것이 좋습니다. 그러나 이 자습서에서는 평균 사용자에게 더 적합한 기본 교육을 제공합니다.

필요 사항

목표

이 자습서에서는 다음 작업을 학습합니다.

crontab 파일의 내용을 나열합니다.

주: 무료 실습 환경을 사용하는 경우 Oracle Linux Lab Basics에서 연결 및 기타 사용 지침을 참조하십시오.

crontab -l 명령을 사용하여 crontab 파일의 내용을 나열합니다.

crontab -l

사용자에 대한 crontab 항목이 없으면 다음 메시지가 표시됩니다.

no crontab for oracle

crontab 생성 또는 편집

  1. crontab –e 명령을 사용하여 기본 편집기에서 crontab을 엽니다.

    crontab -e
    

    Oracle Linux의 기본 편집기는 vim 편집기입니다.

  2. 다음 행을 파일 끝에 추가하여 1분마다 echo 명령을 실행하는 crontab 작업을 만듭니다.

    * * * * * echo "Hello World"
    

    vim:

    • 'Shift-g'를 눌러 파일의 맨 아래로 이동할 수 있습니다.
    • 'i' 키를 눌러 삽입 모드로 들어갑니다.
    • crontab 라인을 입력합니다.
    • 'Esc' 키를 눌러 삽입 모드를 종료합니다.
    • 파일을 쓰고 꽤 편집기에 ':wq'를 입력합니다.

    이 단계에서는 crontab을 설치하고 즉시 활성화합니다.

    crontab: installing new crontab
    
  3. crontab의 항목을 나열하여 새 항목을 표시합니다.

    crontab -l
    

각 작업은 crontab의 자체 행에 표시됩니다. crontab에는 구성할 수 있는 서로 다른 기간을 정의하는 5개의 공백으로 구분된 필드가 있고, 그 다음 작업에 대해 실행되는 명령이 있습니다. 이 명령은 시스템의 명령줄에서 실행할 수 있는 모든 명령과 동일할 수 있으므로 고유한 스크립트를 실행하거나 파이프 및 재지정 연산자를 사용할 수 있습니다.

cron 항목 출력 확인

기본적으로 MTA(Mail Transport Agent)는 최소 Oracle Linux 시스템 또는 Oracle Linux 플랫폼 이미지에 설치되지 않습니다. MTA를 찾을 수 없으면 cron 데몬이 crontab에 지정된 명령의 출력을 Syslog 데몬으로 보냅니다. Oracle Linux를 새로 설치하면 /var/log/cron의 로그 파일에서 crontab 출력을 볼 수 있습니다.

다음 명령을 실행하여 새 crontab 항목에 의해 생성된 출력을 확인합니다.

sudo tail /var/log/cron

cron 작업은 1분마다 실행되므로 명령을 실행하기 전에 1분 정도 기다려야 할 수 있습니다. 이 cron 항목에 대한 출력은 다음과 유사해야 합니다.

Jun 30 12:39:02 ol-server CROND[68564]: (oracle) CMD (echo "Hello World")
Jun 30 12:39:02 ol-server CROND[68551]: (oracle) CMDOUT (Hello World)

이 출력은 명령이 실행되는 사용자, 실행된 명령, 명령 출력을 보여줍니다.

postfix 또는 sendmail과 같은 MTA가 설치된 경우 cron은 crontab 항목의 출력을 crontab 항목이 실행되는 사용자의 메일 스풀로 보냅니다. 이 내용은 이 자습서의 뒷부분에서 자세히 다룹니다.

크론탭 시간 순서 옵션

Crontab 시간 필드는 다음 순서로 정의됩니다.

특수 문자는 다음 시간 필드 내에서 사용할 수 있습니다.

또한 crontab에서는 특별한 간단한 확장을 사용하여 일반 시간 요구 사항에 대한 시간 필드를 바꿀 수 있습니다. 중요한 것은 재부트 후 명령을 실행하는 옵션도 포함되는 것입니다.

crontab은 1분 세분성만 제공합니다. 1분마다 자주 실행되는 crontab 항목을 설정하는 것은 간단하지 않습니다. 이를 처리할 수 있는 도구를 찾으려면 Systemd 타이머 장치를 살펴보십시오.

crontab을 편집하여 서로 다른 시간 시퀀스에서 실행 중인 명령을 시도합니다.

  1. crontab –e 명령을 사용하여 기본 편집기에서 crontab을 엽니다.

    crontab -e
    
  2. crontab에 다음 항목을 추가합니다.

    */15 * * * * echo "This crontab entry runs every 15 minutes"
    10 * * * * echo "This crontab entry runs at 10 minutes past every hour"
    30 13 * * 3 echo "This crontab entry runs at 13h30 on every Wednesday"
    @reboot echo "This command runs once after a reboot event"
    
  3. crontab 파일을 저장하고 종료합니다.

Crontab 명령 구문

crontab 명령은 다음을 포함하여 crontab이 속한 사용자의 자격 증명으로 실행되며, 일부 기본 환경 변수 세트와 함께 실행됩니다.

대체 환경 변수를 시간 필드를 포함하지 않는 crontab 내의 행으로 지정하여 설정할 수 있습니다. 예를 들어, bash 셸을 사용하고 정기적으로 개인 .bashrc 구성을 사용하여 모든 변수 및 설정을 임포트하려는 경우 다음과 같이 crontab을 편집하여 볼 수 있습니다.

SHELL=/bin/bash
* * * * * source $HOME/.bashrc;

crontab 작업에 대한 명령 실행이 셸 환경 내에서 실행되므로 표준 셸 구문이 적용되며 출력을 파이프하거나 재지정하는 데 사용될 수 있습니다. 예를 들어, 모든 출력을 /dev/null로 재지정하고, 결과적으로 작업에 대해 메일로 전송된 출력을 사용 안함으로 설정하려면 명령의 STDOUT 및 STDERR 출력에 대해 표준 셸 재지정을 사용합니다.

* * * * * /path/to/command > /dev/null 2>&1

또는 출력을 재지정하여 실행할 때마다 명령 출력을 추적하는 데 사용할 수 있는 파일에 추가할 수 있습니다.

* * * * * /path/to/command >> $HOME/command.log

명령 구문을 테스트하도록 crontab 편집

  1. crontab -e 명령을 사용하여 편집기에서 crontab을 엽니다.

  2. 다음 항목을 추가합니다.

    */15 * * * * echo "This 'silent' crontab entry runs every 15 minutes but output is redirected to /dev/null" > /dev/null 2>&1
    * * * * * echo "The date and time is $(date +\%Y-\%m-\%d\ \%H:\%M:\%S)" >> $HOME/crontab.log
    

    crontab 유틸리티에 의해 % 문자가 줄바꿈 문자로 변경되고 처음 % 이후의 모든 데이터가 표준 입력으로 명령에 전송되기 때문에 date 명령의 % 문자가 이스케이프됩니다. 자세한 내용은 man 5 crontab을 참조하십시오.

  3. 파일을 저장하고 종료합니다.

1분 안에 crontab.log 파일이 $HOME 디렉토리에 나타나야 합니다. 다음을 실행하여 이 파일의 내용을 볼 수 있습니다.

tail $HOME/crontab.log

로컬 메일 스풀의 crontab 출력에 액세스합니다.

MTA가 설치된 경우 모든 crontab 출력이 기본적으로 사용자의 시스템 메일 스풀로 전송됩니다.

주: 다음 지침은 목적일 뿐이며 MTA(메일 전송 에이전트)에 대한 전체 구성을 설명하지 않습니다. 구성 기본값은 설치에 적합하지 않을 수 있습니다. 시스템에서 사후 수정을 사용으로 설정하는 경우 제대로 구성하는 방법은 Oracle Linux: Install the Postfix Email Server를 참조하십시오.

crontab 메일 처리가 올바르게 작동하려면 MTA를 올바르게 설치, 구성 및 사용으로 설정해야 합니다. 이 연습에서는 다음 단계를 수행하여 postfix MTA가 로컬 메일을 처리하도록 할 수 있습니다.

  1. postfix 패키지를 설치합니다.

    sudo dnf install -y postfix
    
  2. postfix 서비스를 사용으로 설정하고 시작합니다. 기본 구성에서는 포스트픽스를 로컬 전달 MTA로만 사용할 수 있습니다.

    sudo systemctl enable --now postfix.service
    
  3. 사후 수정 MTA를 사용하여 메일 전달을 처리하도록 Crond 서비스를 다시 시작합니다.

    sudo systemctl restart crond.service
    

출력을 대체 메일 주소로 재지정하거나 cron 작업에 대한 출력을 폐기하도록 crontab을 구성하지 않은 경우 각 작업의 출력이 사용자에 대한 로컬 메일 스풀로 자동으로 전달됩니다. 메일 스풀은 일반적으로 /var/spool/mail/$USER에서 액세스할 수 있는 단일 메일 파일로 저장됩니다. 최근 작동을 모니터링하는 경우 이 파일을 수정하여 전달된 메일을 보는 것이 가장 쉽습니다.

tail -f /var/spool/mail/$USER

관리 가능한 인터페이스에서 각 cron 작업의 출력을 검토하려면 mailx 패키지를 설치하고 mail 명령을 사용하여 메일 스풀의 내용을 확인합니다.

sudo dnf install -y mailx
mail

메일은 다음과 같은 방법으로 나열됩니다.

Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/oracle": 1 messages 1 new
>N  1 (Cron Daemon)         Wed Aug  5 23:48  30/1436  "Cron oracle
&

확인할 메일 메시지 수를 입력합니다. 예를 들어, 1을 입력하여 대기열의 첫번째 메시지를 봅니다.

& 1
Hello World

header 명령을 사용하여 메일 헤더 목록으로 돌아가거나 quit 명령을 사용하여 응용 프로그램을 종료합니다.

crontab에서 MAILTO 환경 변수를 설정하여 cron 출력을 메일로 보내는 데 사용되는 전자 메일 주소를 변경할 수 있지만, 외부 메일 전달을 처리하도록 시스템을 구성해야 합니다. MAILTO 환경을 빈 값으로 설정하면 출력이 폐기되고 crontab의 모든 cron 작업에 대한 메일이 전송되지 않습니다.

전체 crontab 제거

crontab -r 명령을 사용하여 사용자의 전체 crontab을 제거합니다.

crontab -r

이 명령은 사용자에 대해 지정한 모든 cron 작업 항목을 제거합니다. 특정 작업 항목만 제거하려면 crontab -e를 사용하여 crontab을 편집하고 제거할 작업의 행을 제거합니다.

이러한 기능에 대한 자세한 내용은 man 5 crontabman systemd.timer를 참조하십시오.

비디오 데모

Oracle Linux에서 crontab 유틸리티 작업에 대한 자세한 정보가 필요한 경우 Oracle Linux Automating Tasks Cron Utility에서 비디오 데모가 제공됩니다.

추가 정보

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 보다 무료 학습 컨텐츠에 접근할 수 있습니다. 또한 education.oracle.com/learning-explorer을 방문하여 Oracle Learning Explorer가 됩니다.

제품 설명서는 Oracle Help Center를 참조하십시오.