Linux의 Crontab – 실시간 예제 및 도구 포함

목차

crontab 명령어와 관련된 다양한 작업들을 심층적으로 살펴보겠습니다.

cron 유틸리티를 활용하여 작업 예약 방법을 배우고, cron 명령어의 형식을 지정하고 검증하는 데 도움이 되는 온라인 도구들을 소개합니다.

유래

Crontab은 “크론 테이블”의 약자입니다. ‘cron’이라는 용어는 시간을 의미하는 그리스어 ‘Chronos’에서 유래했습니다. Crontab은 사용자가 지정한 시간에 특정 작업과 명령을 자동으로 수행하는 시스템 데몬 프로세스입니다.

활용 사례

Crontab은 자동화된 백업 처리, 로그 파일 순환, 원격 시스템 간의 파일 동기화, 임시 폴더 정리 등 다양한 작업을 처리하는 데 유용합니다. 시스템 관리 작업과 같이 정기적으로 실행되어야 하는 작업에 특히 효과적입니다.

cron을 통해 관리자는 특정 시간 및 날짜에 실행되도록 작업을 스케줄링할 수 있습니다.

이제 어떻게 설정하는지 알아보겠습니다.

크론탭 문법

cron 유틸리티는 명령 목록을 실행하기 위해 설정 파일을 읽습니다. crontab 설정 테이블의 각 행은 crontab 문법에 따라 해석됩니다. Crontab은 총 6개의 필드로 구성되어 있으며, 처음 5개(1-5) 필드는 작업 실행 날짜와 시간을 정의합니다. 마지막 필드인 6번째 필드는 사용자 이름이나 실행할 작업/명령/스크립트입니다.

* * * * * USER_NAME 명령/실행할_스크립트

│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ 요일 (0 – 6, 0은 일요일 또는 사용자 이름)
│ │ │ |_______________ 월 (1 – 12, *은 매월)
│ │ |______________ 일 (1 – 31, *은 매일)
│ |________________ 시간 (0 – 23, *은 매시간)
|___________________ 분 (0 – 59, *은 매분)

참고:

  • 별표(*)
  • 각 필드에서 가능한 모든 값을 나타내는 데 사용됩니다. 예를 들어, 시간 필드의 별표는 매시간을 의미하고, 월 필드의 별표는 매월을 의미합니다.

사용자 이름은 선택 사항입니다 (시스템 crontab 파일에서만 사용 가능)

예시:

위의 문법을 이해하기 위해 몇 가지 예시를 들어 보겠습니다.

0 5 * * * /scripts/job.sh

1. 매일 오전 5시에 cron 작업이 실행되도록 스케줄링.

0 6,18 * * * /scripts/job.sh

2. 매일 오전 6시와 오후 6시에 cron 작업이 실행되도록 스케줄링.

* * * * * /scripts/job.sh

3. 1분마다 cron 작업이 실행되도록 스케줄링.

0 19 * * mon /scripts/job.sh

4. 매주 월요일 오후 7시에 cron 작업이 실행되도록 스케줄링.

*/10 * * * * /scripts/job.sh

5. 10분마다 cron 작업이 실행되도록 스케줄링.

* * * feb,jun,oct * /script/job.sh

6. 2월, 6월, 10월에 cron 작업이 실행되도록 스케줄링.

25 7 4 3 * /home/script/backup.sh

7. 3월 4일 오전 7시 25분에 쉘 스크립트 /home/script/backup.sh를 실행합니다.

8. 30초마다 cron 작업이 실행되도록 스케줄링

  • crontab에서 초 단위 제어는 기본적으로 지원하지 않지만, 아래와 같은 두 단계를 통해 가능합니다.
* * * * * /home/scripts/script.sh
  • 먼저 1분마다 실행되는 작업을 예약합니다.
* * * * * sleep 30; /home/scripts/script.sh

이제 sleep 명령어를 사용하여 30초 동안 실행을 일시 중지합니다.

위의 작업은 실행을 30초간 멈춘 후 다시 시작합니다.

Cron 설정 파일 유형

Cron 설정 파일에는 두 가지 주요 유형이 있습니다.

UNIX/Linux 시스템 크론탭

이 유형은 주로 시스템 서비스 및 중요한 작업에 사용되므로 루트 권한이 필요합니다. 위에서 설명한 문법에서 6번째 필드는 명령을 실행할 사용자의 이름입니다. 시스템 crontab은 모든 사용자를 대신하여 명령을 실행할 수 있는 기능을 제공합니다.

사용자 크론탭

사용자는 crontab 명령어를 사용하여 자신의 cron 작업을 설정할 수 있습니다. 여기서도 위 문법 설명의 6번째 필드는 실행할 명령이며, 모든 명령은 해당 crontab을 만든 사용자의 권한으로 실행됩니다. 각 사용자는 고유한 crontab 파일을 가질 수 있으며, 해당 파일은 /var/spool/cron/crontabs 디렉토리에 저장되지만 직접 수정할 수는 없습니다. 자신의 cron 작업을 수정하거나 설정하려면 반드시 crontab 명령어를 사용해야 합니다.

작동 원리: cron 서비스(데몬)는 백그라운드에서 실행되며, /etc/crontab 파일 및 /etc/cron.*/ 디렉토리를 지속적으로(매분) 확인합니다. 또한 /var/spool/cron/ 디렉토리도 확인합니다. 명령은 다음과 같은 조건이 충족될 때 실행됩니다. 크론

분, 시, 월 필드가 현재 시간과 일치하고, 두 개의 일 필드(일 또는 요일) 중 하나 이상이 현재 날짜와 일치하는 경우.

기본 명령어

기존 Cron 작업 목록 확인

crontab -l

crontab 설정 파일을 열지 않고도 아래 명령어를 사용하여 모든 Cron 작업을 확인할 수 있습니다.

[[email protected] ~]# crontab -l
no crontab for koreantech.org
[[email protected] ~]#

기존 작업이 없을 경우 다음과 같은 출력이 나타납니다.

[[email protected] ~]# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
0 */1 * * * /home/account/scripts/updateAccountStatuses.sh
0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh
[[email protected] ~]#

사용자가 이미 작업을 추가한 경우 다음과 같이 표시됩니다.

Cron 테이블은 사용자별로 관리됩니다. 즉, 특정 사용자의 cron 테이블 목록을 보려면 해당 사용자로 로그인해야 합니다.

특정 사용자의 Cron 작업 목록 확인

다른 사용자의 예약된 작업을 확인하려면 -u(사용자) 및 -l(목록) 옵션을 사용합니다.

crontab -u another_username -l

예시: crontab -u koreantech.org -l

Crontab 항목 추가/수정

crontab 항목을 편집하려면 -e 옵션을 사용합니다.

crontab -e

위 명령어를 실행하면 작업 세부 정보를 지정할 수 있는 vi 편집기가 열립니다. 파일을 저장한 후 crontab -l 명령어를 사용하여 cron 작업이 올바르게 설정되었는지 확인할 수 있습니다.

특정 사용자에 대한 Crontab 항목 추가/수정

crontab -u another_username -e

아래 명령어를 사용하여 다른 사용자의 crontab을 수정할 수 있습니다.

예시: crontab -u koreantech.org -e

Crontab 항목 제거

-r 매개변수를 crontab 명령어와 함께 사용하면 확인 없이 예약된 모든 작업을 제거합니다.

crontab -r

crontab -i -r
[[email protected] ~]# crontab -i -r
crontab: really delete koreantech.org's crontab?

예약된 작업을 삭제하기 전에 확인 메시지를 표시하려면 -r 옵션과 함께 -i 옵션을 사용하세요. 이렇게 하면 사용자의 crontab을 삭제하기 전에 사용자에게 확인 메시지가 나타납니다.

Crontab 특수 문자열

위에서 설명한 문법 외에도 crontab에서 제공하는 8가지 특수 문자열을 사용할 수 있습니다. 이는 시간을 절약할 뿐만 아니라 가독성을 높이는 데에도 도움이 됩니다.
특수 문자열
설명
@reboot
시스템 부팅 후 한 번 실행합니다.
@yearly
1년에 한 번 실행 (0 0 1 1 *)
@annually
@yearly와 동일
@monthly
한 달에 한 번 실행 (0 0 1 * *)
@weekly
일주일에 한 번 실행 (0 0 * * 0)
@daily
하루에 한 번 실행 (0 0 * * *)
@midnight
@daily와 동일
@hourly

한 시간에 한 번 실행 (0 * * * *)

Crontab 특수 문자열 예시

1. 1년마다 실행되는 작업을 예약하는 Crontab

@yearly /scripts/greeting.sh

새해 인사를 보내기 위해 위와 같이 설정하면 매년 1분에 실행됩니다.

2. 매달 실행되는 작업을 예약하는 Crontab

@monthly /scripts/cleanup.sh

매달 초에 정리 작업을 수행하기 위해 위와 같이 설정할 수 있습니다.

이와 유사하게, 주별, 일별, 시간별 실행을 위해 다른 특수 문자열을 활용할 수 있습니다.

크론 디렉토리

  • 시스템 관리자는 아래와 같은 미리 정의된 cron 디렉토리에서 시스템 전체의 cron 일정을 설정할 수 있습니다.
  • /etc/cron.d
  • /etc/cron.daily
  • /etc/cron.hourly
  • /etc/cron.monthly

/etc/cron.weekly

Crontab 실시간 예제

시스템 관리자나 IT 전문가가 일반적으로 사용하는 몇 가지 실시간 예시를 살펴보겠습니다.

빈 파일 및 디렉토리 삭제

45 0 * * * koreantech.org find /tmp -type f -empty -delete

위의 cron 표현식은 /tmp 디렉토리에서 빈 파일과 디렉토리를 찾아 삭제합니다. 이 작업은 매일 오전 12시 45분에 실행됩니다. 이 작업을 수행하려면 사용자 이름을 명시해야 합니다. 위의 예시에서 koreantech.org 사용자는 cron 작업을 수행합니다.

단일 cron을 사용하여 여러 작업 실행

* * * * * /home/scripts/backup.sh; /home/scripts/scritp.sh

여러 작업/명령은 세미콜론(;)으로 구분하여 단일 cron 표현식에 할당할 수 있습니다.

Cron 형식 지정 및 테스트 도구

지금까지 작업 예약을 위한 crontab 명령어와 문법에 대해 알아보았습니다. 그러나 시스템 관리자가 아닌 경우 또는 정기적으로 Cron을 설정하는 경우가 아니라면 문법을 기억하기 어려울 수 있으며, 그에 따라 오류가 발생할 가능성이 있습니다. 하지만 걱정하지 마세요. 이 문제를 해결할 방법이 있습니다.

온라인에서 사용할 수 있는 다양한 Cron 형식 도구들이 있습니다.

# 1. 크론 작업 생성기 크론 작업 생성기

crontab 생성을 위한 스크립트의 분, 일, 경로를 지정할 수 있는 매우 사용하기 쉬운 GUI 도구입니다.

예를 들어, 월요일부터 금요일까지 매 5분마다 /home/processMonitor.sh를 실행해야 하는 경우를 가정해 보겠습니다.

crontab -e 명령어로 다음과 같은 cron 문법을 생성하여 crontab에 추가할 수 있습니다.
crontab -e

0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh

# 2. 이지크론 이지크론

웹 기반 cron 작업 스케줄러로, URL을 지정하여 cron 작업을 생성하고 실행 시간을 설정할 수 있습니다. cron 표현식을 지정하거나 설명 형식으로 수동으로 추가할 수도 있습니다. 또한 보안을 위해 기본 HTTP 인증을 선택적으로 사용할 수 있습니다.

Easycron은 표준 Cron 표현, Cron 작업 실행 로그, 이메일 알림, 별도의 실패 로그 등과 같은 다른 목적에도 사용할 수 있습니다.

# 3. 크론탭 생성기 크론탭 생성기

crontab을 생성하는 또 다른 편리한 도구로, cron 출력을 파일에 저장하거나 이메일로 전송하는 옵션도 추가할 수 있습니다.

# 4. 크론탭 전문가 크론탭 전문가

간단한 온라인 cron 일정 표현식 편집기입니다. 또한 cronjob을 모니터링하는 유용한 방법도 제공합니다. 제공된 명령을 복사하여 crontab 정의 끝에 추가하면 됩니다. cron 작업이 실패하거나 시작되지 않을 경우 알림 이메일을 받을 수 있습니다.

아래 예시에서는 매일, 매월, 매주 04시 05분에 작업이 실행됩니다.

# 5. 크론 테스터 크론 테스터

cron 시간/날짜 정의를 테스트할 수 있습니다. 기존 cron 문법을 디코딩하거나 테스트를 수행해야 하는 상황에서 유용하게 사용할 수 있습니다.

이 도구를 사용하려면 cron 정의 필드에 cron 표현식을 복사하여 붙여넣고, 반복 횟수를 선택한 후 테스트를 클릭하여 실행될 날짜를 확인할 수 있습니다.

이틀마다 03시 04분(AM)에 실행되어야 하는 cron 표현식 4 3 */2 * *을 예시로 들어보겠습니다. 크론 테스터를 이용하여 확인해보겠습니다.

결론 위의 내용이 Crontab을 이해하고 cron 작업을 설정하는 데 도움이 되기를 바랍니다. Cron을 이용한 작업 예약은 Linux 관리자가 수행하는 많은 작업 중 하나입니다. 고급 기술 학습에 관심이 있다면 여기를 참고하세요.강의

.