주:
- 이 사용지침서는 Oracle 제공 무료 실습 환경에서 제공됩니다.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 대한 예제 값을 사용합니다. 실습을 마치면 사용자의 클라우드 환경과 관련된 값으로 대체합니다.
Crontab 유틸리티를 사용하여 Oracle Linux에서 작업 예약
시작하기 전에
이 사용지침서에서는 Oracle Linux에서 crontab 명령을 사용하는 방법을 보여줍니다.
배경
Oracle Linux는 프로그램을 예약된 작업 또는 작업으로 자동으로 실행할 수 있습니다. /etc/cron*
에서 cron 구성을 편집하여 시스템 레벨 작업으로 실행되도록 프로그램을 예약하거나 사용자 crontab 내에서 작업으로 실행되도록 프로그램을 예약할 수 있습니다. 시스템에 대한 시스템 관리자 액세스 권한이 없거나 예약하려는 프로그램이 사용자 계정과 관련된 경우 crontab 유틸리티는 사용자의 고유 사용자 자격 증명에 따라 정기적으로 프로그램을 실행할 수 있는 적절한 방식을 제공합니다. crontab을 사용하면 작업을 1분마다 또는 1년에 한 번만큼 자주 실행하도록 예약할 수 있습니다. 그러나 작업이 실행되도록 예약된 시간 동안 시스템이 작동 중지된 경우 cron 작업이 실행되지 않습니다.
cron 구성은 대부분의 Linux 시스템에서 표준이며 1975년부터 Unix와 유사한 시스템에서 사용할 수 있었습니다. 더 복잡한 스케줄링 솔루션은 타이머 형태로 Systemd에 포함되어 있으며 사용자는 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의 기본 편집기는 vim 편집기입니다.
-
다음 행을 파일 끝에 추가하여 1분마다 echo 명령을 실행하는 crontab 작업을 만듭니다.
* * * * * echo "Hello World"
vim:
- 'Shift-g'를 눌러 파일의 맨 아래로 이동할 수 있습니다.
- 'i' 키를 눌러 삽입 모드로 들어갑니다.
- crontab 라인을 입력합니다.
- 'Esc' 키를 눌러 삽입 모드를 종료합니다.
- 파일을 쓰고 꽤 편집기에 ':wq'를 입력합니다.
이 단계에서는 crontab을 설치하고 즉시 활성화합니다.
crontab: installing new crontab
-
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 시간 필드는 다음 순서로 정의됩니다.
- 분: 0에서 59까지
- 시간: 0에서 23까지
- 일: 1에서 31까지
- month: 1부터 12까지 또는 해당 월의 이름입니다.
- day-of-week: 0 ~ 7 또는 축약된 일 이름입니다. 0과 7은 모두 일요일을 나타냅니다.
특수 문자는 다음 시간 필드 내에서 사용할 수 있습니다.
- 별표(*): 필드의 모든 인스턴스에 대해 명령을 실행하도록 지정합니다.
- 하이픈(-): 범위를 나타내는 데 사용할 수 있습니다. 예를 들어, 요일 필드에서 1-5를 지정하여 작업이 월요일부터 금요일까지 실행되도록 예약할 수 있지만 토요일 또는 일요일에는 실행되지 않도록 할 수 있습니다.
- 쉼표(,): 필드의 값 리스트를 지정하는 데 사용할 수 있습니다. 예를 들어, 시간 필드에서 오전 6시와 오후 6시에 실행되도록 작업을 예약하도록 6,18을 지정할 수 있습니다.
- 슬래시(/): 단계 값을 지정하는 데 사용할 수 있습니다. 예를 들어, 분 필드에 */15를 지정하여 15분마다 태스크가 실행되도록 스케줄링할 수 있습니다.
또한 crontab에서는 특별한 간단한 확장을 사용하여 일반 시간 요구 사항에 대한 시간 필드를 바꿀 수 있습니다. 중요한 것은 재부트 후 명령을 실행하는 옵션도 포함되는 것입니다.
- @reboot : 재부트 후 한 번 실행합니다.
- @yearly : 일년에 한 번, 즉 "0 0 1 1 *"를 실행합니다.
- @annually : 일년에 한 번, 즉 "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
-
postfix 서비스를 사용으로 설정하고 시작합니다. 기본 구성에서는 포스트픽스를 로컬 전달 MTA로만 사용할 수 있습니다.
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을 편집하고 제거할 작업의 행을 제거합니다.
이러한 기능에 대한 자세한 내용은 man 5 crontab
및 man 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를 참조하십시오.
Use the Crontab Utility to Schedule Tasks on Oracle Linux
F49760-04
July 2022
Copyright © 2021, Oracle and/or its affiliates.