Cron은 Unix 기반 OS에서 사용 가능한 유틸리티 중 하나로 Cron이 제공하는 규칙에 따라 User가 Job이 작동할 시간을 직접 정의하여 특정 시간 또는 주기로 Job을 스케줄링하는 기능을 제공한다.

Job이란 Unix 기반에서 스크립트의 실행, 네트워킹 등 시스템 자원을 활용한 일련의 Task들이다.

Cron은 범용적이며 분, 시간, 일, 월, 요일 5개 시간 단위와 몇가지 규칙을 사용해서 특정 시간 또는 특정 주기에 Job을 실행시키는 방식으로 사용법이 단순하다.

Job Monitoring, Failover와 같은 Job 관리 기능이 없는 것만 제외하면 이런 범용성과 단순함 덕분에 다양한 상황에서 가벼운 Job 스케줄링이 필요한 경우에 사용된다.

사용법

crontab 명령어로 Cron을 사용할 수 있다.

옵션

  • -u
    Job 스케줄링 계정(실행 권한) 설정. 생략하면 명령어를 실행한 User로 자동 할당된다.
  • -e
    Cron 스케줄링 파일을 열고 수정한다. 해당 파일에서 이전에 작성한 스케줄도 수정 가능하며 새로운 스케줄도 등록할 수 있다.
  • -l
    등록된 스케줄 목록 확인.

Job 스케줄 확인하기

스케줄의 수정, 추가 없이 등록되어있는 스케줄 목록만 확인 할 경우 사용.

1
crontab -l

아래와 같은 결과들을 볼 수 있다.

1
* 0 1 * * /usr/local/bin/something.sh

Job 스케줄 등록하기

새로운 Job 스케줄링을 등록하기 위해 아래 명령어를 실행시키면 crontab 파일이 열린다.

1
crontab -e

해당 파일의 1개 라인마다 1개 스케줄링에 해당하며 1개 스케줄링은 5개 시간 단위를 이용해서 설정할 수 있다.

crontab 시간 단위

5개의 시간 단위는 항상 왼쪽부터 오른쪽으로 가면서 아래와 같다.

1
분 시 일 월 요일 <excutable>
단위명 범위 설명
0 ~ 59 Job을 실행할 분.
0 ~ 23 Job을 실행할 시간.
1 ~ 31 Job을 실행할 일.
1 ~ 12 Job을 실행할 월.
요일 0 ~ 6 Job을 실행할 요일. 일(0), 월(1), 화(2), 수(3), 목(4), 금(5), 토(6)를 의미.

예를 들어, 아래 스케줄링은 12월 30일 23:59에 명령어를 실행시킨다.
이때 요일 단위의 값 *은 바로 아래에서 설명한다.

1
59 23 30 12 * echo "Happy New Year"

특수 시간 단위

각 시간 단위에 *을 입력하면 매 단위 마다 실행된다.

예를 들어, 아래 스케줄링은 매일 00:10 마다 명령어를 실행 시킨다.

1
10 0 * * * echo "Hello World"

주기적 스케줄링

정수 n에 대해 */n과 같은 형식으로 특정 시간 단위의 값을 정의하면 Job이 해당 시간 단위에서 주기적으로 실행되도록 할 수 있다.

예를 들어, 아래 스케줄링은 10분 마다 Job을 실행시킨다.

1
*/10 * * * * echo "This is heartbeat."

복수 스케줄링

콤마(,)를 이용해서 특정 시간 단위의 값을 정의하면 Job이 해당 시간 단위에서 여러개의 시간대에 실행되도록 할 수 있다.

예를 들어, 아래 스케줄링은 매일 1시, 2시, 3시에서 5분 마다 Job을 실행시킨다.
즉, 01:00, 01:05, …, 01:55, … 02:00, 02:05, …, 02:55, 03:00, 03:05, …, 03:55 마다 Job을 실행시킨다.

1
*/5 1,2,3 * * * echo "Cuckoo Cuckoo.."

Meta Info

Categories: ,

Published At:

Modified At:

Leave a comment