참고:
- 이 자습서는 Oracle에서 제공하는 무료 실습 환경에서 사용할 수 있습니다.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 대한 예제 값이 사용됩니다. 랩을 완료한 후에는 이러한 값을 클라우드 환경과 관련된 값으로 대체하십시오.
Crontab 유틸리티를 사용하여 Oracle Linux에서 작업 예약
시작하기 전에
이 사용지침서에서는 Oracle Linux에서 crontab 명령을 사용하는 방법을 보여줍니다. 이 사용지침서는 Oracle Linux 8 사용자를 대상으로 하지만 다른 Oracle Linux 릴리스에서도 명령을 사용할 수 있습니다.
배경
Oracle Linux는 예정된 작업이나 작업으로 프로그램을 자동으로 실행할 수 있습니다. /etc/cron*
에서 cron 구성을 편집하여 시스템 레벨 작업으로 실행되도록 프로그램을 예약하거나 사용자 crontab 내에서 작업으로 실행하도록 프로그램을 예약할 수 있습니다. 시스템에 대한 시스템 관리자 액세스 권한이 없거나 일정을 잡으려는 프로그램이 사용자 계정에만 해당하는 경우, crontab 유틸리티는 사용자 고유 자격 증명 아래의 일정에서 프로그램을 실행할 수 있는 좋은 방식을 제공합니다. crontab을 사용하면 작업을 1분마다 또는 1년마다 자주 실행하도록 예약할 수 있습니다. 그러나 작업이 실행되도록 일정이 잡힌 시간 동안 시스템이 작동 중지되면 cron 작업이 실행되지 않습니다.
이 자습서는 Oracle Linux 8 사용자를 대상으로 하지만 crontab은 Oracle Linux 7에서도 사용할 수 있으며 이 자습서의 내용은 해당 플랫폼에 동일하게 적용됩니다. cron 구성은 대부분의 Linux 시스템에서 표준이며 1975년 이후 Unix 유사 시스템에 제공되었습니다. 보다 복잡한 스케줄링 솔루션이 Systemd에 타이머 및 사용자 형태로 포함되어 있으므로 특정 요구사항을 해결하려면 시스템 타이머를 보다 심층적으로 살펴 보는 것이 좋습니다. 그러나 이 자습서에서는 평균 사용자에게 더 적합한 기본 교육을 제공합니다.
필요 사항
- Oracle Linux가 설치된 시스템
목표
이 자습서에서는 다음 작업을 수행하는 방법을 배웁니다.
- 기존 crontab의 내용 목록
- crontab 항목 생성 및 편집
- crontab 출력 액세스
- 사용자의 전체 crontab 제거
crontab 파일의 내용 지우기
주: 무료 실습 환경을 사용할 때는 연결 및 기타 사용 지침은 Oracle Linux Lab Basics을 참조하십시오.
crontab -l
명령을 사용하여 crontab 파일의 내용을 나열합니다.
crontab -l
사용자에 대한 crontab 항목이 없으면 다음 메시지가 표시됩니다.
no crontab for oracle
crontab 생성 또는 편집
-
crontab –e
명령을 사용하여 기본 편집기에서 crontab을 엽니다.crontab -e
Oracle Linux 8의 기본 편집기는 vim 편집기입니다.
-
파일 끝에 다음 행을 추가하여 매분 echo 명령을 실행하는 crontab 작업을 만듭니다.
* * * * * echo "Hello World"
주요 특징
- 'Shift-g'를 눌러 파일 맨 아래로 이동할 수 있습니다.
- 'i' 키를 눌러 삽입 모드로 들어갑니다.
- crontab 행을 입력합니다.
- 'Esc' 키를 눌러 삽입 모드를 종료합니다.
- 파일을 쓰고 편집기를 인용하려면 ':wq'를 입력합니다.
이 단계에서는 crontab을 설치하고 즉시 활성화됩니다.
crontab: installing new crontab
-
crontab에 있는 항목을 나열하여 새 항목을 표시합니다.
crontab -l
각 작업은 crontab의 해당 행에 표시됩니다. crontab에는 구성할 수 있는 서로 다른 기간을 정의하는 5개의 공백으로 구분된 필드와 작업에 대해 실행되는 명령이 있습니다. 명령은 사용자 고유의 스크립트를 실행하거나 파이프 및 재지정 연산자를 사용할 수 있도록 시스템의 명령줄에서 실행할 수 있는 명령과 같을 수 있습니다.
cron 항목 출력을 확인합니다.
기본적으로 MTA(메일 전송 에이전트)가 최소 Oracle Linux 시스템 또는 Oracle Linux 플랫폼 이미지에 설치되지 않습니다. MTA가 없는 경우 cron 데몬은 crontab에 지정된 명령의 출력을 Syslog 데몬으로 지정합니다. Oracle Linux 8의 새 설치에서 /var/log/cron
의 로그 파일에서 crontab 출력을 볼 수 있습니다.
다음 명령을 실행하여 새 crontab 항목으로 생성된 출력을 확인합니다.
sudo tail /var/log/cron
cron 작업은 1분마다 실행되므로 명령을 실행하기 전에 1분 정도 기다려야 할 수 있습니다. 이 cron 항목에 대한 출력은 다음과 유사해야 합니다.
Jun 30 12:39:02 ol8-server CROND[68564]: (oracle) CMD (echo "Hello World")
Jun 30 12:39:02 ol8-server CROND[68551]: (oracle) CMDOUT (Hello World)
이 출력은 명령이 실행된 사용자, 실행된 명령 및 명령 출력을 보여줍니다.
postfix 또는 sendmail과 같은 MTA가 설치된 경우 cron은 crontab 항목의 출력을 crontab 항목이 실행되는 사용자에 대한 메일 스풀로 지정합니다. 이에 대해서는 이 자습서의 뒷부분에서 자세히 설명합니다.
Crontab 시간 시퀀스 옵션
Crontab 시간 필드는 다음 순서로 정의됩니다.
- minute: 0에서 59까지
- 시간: 0에서 23까지
- 일: From 1 to 31
- month: 1에서 12까지 또는 해당 월의 이름
- day-of-week: From 0 to 7 또는 단축된 요일 이름입니다. 0과 7은 모두 일요일을 나타냅니다.
다음 시간 필드 내에서 특수 문자를 사용할 수 있습니다.
- 별표(*): 필드의 모든 인스턴스에 대해 명령을 실행하도록 지정합니다.
- 하이픈(-) - 범위를 나타내는 데 사용할 수 있습니다. 예를 들어, 요일 필드에서 1-5를 지정하여 작업이 월요일에서 금요일까지 실행되도록 스케줄링할 수 있지만 토요일이나 일요일에는 실행되도록 스케줄링할 수 있습니다.
- 쉼표(,)): 필드의 값 목록을 지정하는 데 사용할 수 있습니다. 예를 들어, 시간 필드에서 6,18을 지정하여 작업이 오전 6시 및 오후 6시에 실행되도록 예약할 수 있습니다.
- 슬래시(/): 단계 값을 지정하는 데 사용할 수 있습니다. 예를 들어, 분 필드에 */15를 지정하여 15분마다 작업이 실행되도록 일정을 잡을 수 있습니다.
crontab에서는 특수한 짧은 확장을 사용하여 일반 시간 요구 사항에 대한 시간 필드를 바꿀 수도 있습니다. 이 간단한 과정에는 재부트 후 명령을 실행하는 옵션도 포함되어 있습니다.
- @reboot : 재부트 후 한 번 실행합니다.
- @yearly : 1년에 한 번 실행합니다(예: "0 0 1 1 *").
- @annually : 1년에 한 번 실행합니다(예: "0 0 1 1 *").
- @monthly : 한 달에 한 번 실행합니다(예: "0 0 1 *").
- @weekly : 한 주에 한 번 실행합니다(예: "0 0 * 0").
- @daily : 하루에 한 번 실행합니다(예: "0 0 * * *").
- @hourly : 한 시간에 한 번 실행합니다(예: "0 * * * * *").
crontab은 1분 단위만 제공합니다. 1분마다 자주 실행되는 crontab 항목을 설정하는 것은 간단하지 않습니다. 이를 처리할 수 있는 도구를 찾고 있다면 Systemd 타이머 유닛을 살펴보십시오.
다른 시간 시퀀스에서 실행 중인 다른 명령을 시도하도록 crontab 편집
-
crontab –e
명령을 사용하여 기본 편집기에서 crontab을 엽니다.crontab -e
-
다음 항목을 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"
-
crontab 파일을 저장하고 종료합니다.
Crontab 명령 구문
crontab 명령은 crontab이 속한 사용자의 자격 증명 아래에서 실행되며 다음과 같은 일부 기본 환경 변수를 설정하여 실행합니다.
- HOME: crontab이 실행되는 사용자의 홈 디렉토리
- LOGNAME: crontab이 실행되는 사용자의 사용자 이름과 같습니다.
- USER: crontab이 실행되는 사용자의 사용자 이름
- SHELL: 명령을 실행하는 데 사용되는 셸 이진입니다. 기본적으로
/bin/sh
로 설정됩니다. - PATH: crontab 유틸리티에 사용할 수 있는 경로입니다. 기본적으로
/usr/bin:/bin
로 설정됩니다.
시간 필드를 포함하지 않는 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을 편집하여 명령 구문 실험
-
crontab -e
명령을 사용하여 편집기에서 crontab을 엽니다. -
다음 항목을 추가합니다.
*/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
을 참조하십시오. -
파일을 저장하고 종료합니다.
1분 내에 crontab.log 파일이 $HOME 디렉토리에 나타나야 합니다. 다음을 실행하여 이 파일의 내용을 볼 수 있습니다.
tail $HOME/crontab.log
로컬 메일 스풀에서 crontab 출력에 액세스
MTA가 설치된 경우 모든 crontab 출력은 기본적으로 사용자의 시스템 메일 스풀로 전송됩니다.
주: 다음 지침은 예제 목적으로만 사용되며 MTA(메일 전송 에이전트)에 대한 전체 구성이 아닌지 설명합니다. 구성 기본값은 설치에 적합하지 않을 수 있습니다. 시스템에서 사후 수정을 사용으로 설정하는 경우 Oracle Linux: Install the Postfix Email Server에서 올바르게 구성하는 방법에 대한 정보를 읽어 보십시오.
crontab 메일 처리가 올바르게 작동하려면 MTA를 올바르게 설치, 구성 및 사용으로 설정해야 합니다. 이 연습에서는 다음 단계를 수행하여 postfix MTA에서 로컬 메일을 처리하도록 설정할 수 있습니다.
-
postfix 패키지를 설치합니다.
sudo dnf install -y postfix
-
사후 수리 서비스를 사용으로 설정하고 시작합니다. 기본 구성에서는 로컬 배달 MTA로 Postfix를 사용으로 설정합니다.
sudo systemctl enable --now postfix.service
-
우편 배달을 처리하기 위해 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을 편집하고 제거할 작업의 행을 제거합니다.
비디오 데모
비디오 데모는 Oracle Linux 8에서 crontab 유틸리티 작업에 대한 자세한 정보가 필요한 경우 https://www.youtube.com/watch?v=BpPGoRYTv9I에 제공됩니다.
Oracle Linux 8 작업 자동화 Cron 유틸리티
추가 정보
man 5 crontab
man systemd.timer
- Oracle Linux: Postfix 전자 메일 서버 설치
- Oracle Linux 제품 문서
- Oracle 교육 라이브러리
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 찾아보거나 Oracle Learning YouTube channel에서 무료 학습 콘텐츠에 액세스할 수 있습니다. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer로 변경하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Use the Crontab Utility to Schedule Tasks on Oracle Linux
F49760-03
May 2022
Copyright © 2021, Oracle and/or its affiliates.