crontab.run

Crontab 명령어 설명

Cron 데몬(crond)은 Unix 계열 운영 체제에서 예약된 명령을 실행하는 백그라운드 서비스입니다. crontab(cron 테이블) 파일에서 구성을 읽으며, 각 명령의 실행 시기와 빈도를 정의합니다.

구문

crontab 명령어는 사용자별 crontab 파일을 관리합니다:

crontab [-u user] [-l | -r | -e | -i] [file]

옵션

-e
기본 편집기($VISUAL 또는 $EDITOR)에서 현재 사용자의 crontab을 편집합니다. 편집기 종료 후 새 crontab이 설치됩니다.
-l
현재 사용자의 crontab을 표준 출력에 표시합니다.
-r
현재 사용자의 crontab을 완전히 제거합니다.
-i
제거 전 확인을 묻습니다(-r과 함께 사용).
-u user
자신의 crontab 대신 지정된 사용자의 crontab을 조작합니다. root 권한이 필요합니다.
file
주어진 파일에서 crontab을 설치합니다. 표준 입력의 경우 -를 사용합니다.

Crontab 파일 형식

crontab 파일의 각 줄은 환경 변수 할당, 주석(#으로 시작), 또는 다음 형식의 cron 작업입니다:

┌───────────── 분 (0–59)
│ ┌───────────── 시 (0–23)
│ │ ┌───────────── 일 (1–31)
│ │ │ ┌───────────── 월 (1–12 또는 JAN–DEC)
│ │ │ │ ┌───────────── 요일 (0–6 또는 SUN–SAT)
│ │ │ │ │
* * * * *  실행할 명령

필드 연산자

* (asterisk)
해당 필드의 모든 가능한 값에 일치합니다.
, (comma)
값 목록을 지정합니다. 예: 일 필드의 1,15는 1일과 15일을 의미합니다.
- (hyphen)
포함 범위를 정의합니다. 예: 시 필드의 9-17은 9시부터 17시까지의 매 시간을 의미합니다.
/ (slash)
단계를 정의합니다. 예: 분 필드의 */10은 10분마다를 의미합니다. 범위와 결합할 수 있습니다: 1-30/5.

특수 문자열

다섯 개의 시간 필드 대신 다음 약어 문자열 중 하나를 사용할 수 있습니다:

StringEquivalent
@yearly / @annually0 0 1 1 *
@monthly0 0 1 * *
@weekly0 0 * * 0
@daily / @midnight0 0 * * *
@hourly0 * * * *
@rebootRun once at startup

환경 변수

crontab 파일 상단에 환경 변수를 설정할 수 있습니다. 가장 일반적인 것들:

SHELL
명령을 실행하는 데 사용되는 셸(기본값: /bin/sh).
PATH
명령의 검색 경로. Cron의 기본 PATH는 최소한(보통 /usr/bin:/bin)이므로, 항상 절대 경로를 사용하거나 PATH를 명시적으로 설정하세요.
MAILTO
명령 출력을 보낼 곳. ""로 설정하면 이메일이 비활성화됩니다. 기본적으로 출력은 crontab 소유자에게 메일로 전송됩니다.
CRON_TZ
crontab의 시간대를 설정합니다(모든 시스템에서 지원되지는 않음). 설정하지 않으면 cron은 시스템 시간대를 사용합니다.
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
[email protected]

*/5 * * * * /home/user/scripts/backup.sh

시스템 crontab과 사용자 crontab

사용자 crontab(crontab -e로 편집)은 다섯 개의 시간 필드와 명령으로 구성됩니다. 시스템 crontab(/etc/crontab)과 /etc/cron.d/의 파일은 시간 필드와 명령 사이에 추가 필드가 있습니다: 명령을 실행할 사용자 이름.

시스템 crontab 예제:

# /etc/crontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m  h  dom mon dow user    command
*/15 *  *   *   *   root    /usr/local/bin/system-check.sh
0    2  *   *   *   backup  /usr/local/bin/nightly-backup.sh

일반적인 함정

% (percent sign)

퍼센트 기호(%)는 crontab에서 특별한 의미를 가집니다: 줄바꿈으로 변환되며, 첫 번째 % 이후의 모든 것은 명령의 표준 입력으로 전송됩니다. 리터럴 %를 사용하려면 \%로 이스케이프하세요.

# Wrong — the % will be interpreted
0 0 * * * echo "Date: $(date +%Y-%m-%d)"

# Correct — escape the %
0 0 * * * echo "Date: $(date +\%Y-\%m-\%d)"

PATH

Cron은 최소한의 PATH로 실행됩니다. /usr/local/bin이나 다른 디렉토리의 명령에 의존하는 스크립트는 절대 경로를 사용하거나 crontab 상단에 PATH를 설정해야 합니다.

Day-of-month + day-of-week

일(day-of-month)과 요일(day-of-week)이 모두 제한된 경우(* 아님), cron은 어느 한 필드가 일치할 때 명령을 실행합니다(OR 논리). 예를 들어, 0 0 1 * 5는 매월 1일 자정과 매주 금요일에 실행됩니다.

Timezone

Cron은 기본적으로 시스템 시간대를 사용합니다. 서버가 UTC이지만 로컬 시간대로 작업을 실행하려면 CRON_TZ(지원되는 경우)를 사용하거나 시간을 수동으로 변환하세요.

Output and logging

기본적으로 cron은 모든 출력(stdout과 stderr)을 crontab 소유자에게 메일로 보냅니다. 작업을 무음으로 하려면 출력을 리디렉션하세요: command > /dev/null 2>&1. 출력을 기록하려면 파일로 리디렉션: command >> /var/log/myjob.log 2>&1.

# Discard all output
*/5 * * * * /path/to/script.sh > /dev/null 2>&1

# Log output to a file
*/5 * * * * /path/to/script.sh >> /var/log/myscript.log 2>&1

실용 예제