들어가기
리눅스를 사용하다 보면 정해진 시간에 반복 작업을 실행해야 하는 상황을 자주 만나게 됩니다.
백업 스크립트, 로그 정리, 임시 파일 삭제, 주기적인 상태 점검 등이 대표적입니다.
이런 작업을 매번 사람이 직접 실행하는 것은 비효율적입니다.
리눅스에서는 이를 위해 작업 스케줄링 서비스를 제공합니다.
이번 글에서는 리눅스에서 가장 많이 사용되는 스케줄링 도구인 cron, 그리고 보조적으로 사용되는 at, anacron의 역할과 사용 흐름을 정리합니다.
실무에서 자주 사용하는 cron을 중심으로 설명합니다.
리눅스 작업 스케줄링 도구 개요
리눅스에서 사용하는 대표적인 스케줄링 서비스는 다음과 같습니다.
- cron : 주기적으로 반복 실행되는 작업
- at : 한 번만 실행되는 예약 작업
- anacron : 시스템이 꺼져 있어도 실행 보장이 필요한 작업
이 중에서 cron이 가장 많이 사용됩니다.
서버 환경에서는 사실상 표준이라고 봐도 무방합니다.
CRON 이란
cron은 정해진 시간 규칙에 따라 명령이나 스크립트를 실행하는 데몬 서비스입니다.
백그라운드에서 항상 동작하며, 설정된 작업이 있으면 해당 시점에 실행합니다.
cron 사용 제한 정책
cron은 아무 사용자나 사용할 수 없습니다.
시스템 관리자가 허용한 사용자만 cron을 사용할 수 있도록 제한할 수 있습니다.
이때 사용되는 파일이 다음 두 가지입니다.
/etc/cron.allow/etc/cron.deny
동작 규칙은 다음과 같습니다.
-
cron.allow파일이 존재하면- root 사용자와
cron.allow에 등록된 사용자만 cron 사용 가능 cron.deny파일은 무시됨
- root 사용자와
-
cron.allow파일이 존재하지 않고cron.deny만 있으면cron.deny에 등록된 사용자는 cron 사용 불가- 나머지 사용자는 사용 가능
보안이 중요한 시스템에서는 보통 cron.allow 파일을 사용하여
허용된 사용자만 명확하게 관리합니다.
Crontab 이란
cron 작업은 crontab(cron table) 이라는 설정 파일에 등록됩니다.
각 사용자는 자신의 crontab을 가질 수 있으며,
cron 데몬은 이를 읽어 작업을 수행합니다.
crontab 명령어
crontab을 관리하기 위한 기본 명령어는 다음과 같습니다.
- 현재 등록된 cron 작업 확인
bashcrontab -l
- cron 작업 편집
bashcrontab -e
- cron 작업 전체 삭제
bashcrontab -r
- 파일로 작성한 cron 설정 등록
bashcrontab filename
실무에서는 보통 crontab -e를 가장 많이 사용합니다.
크론탭 문법 이해하기
crontab의 핵심은 시간 필드 문법입니다.
형식은 다음과 같습니다.
plain분 시 일 월 요일 명령어
이를 풀어서 보면 다음과 같습니다.
plain* * * * * command
┬ ┬ ┬ ┬ ┬
│ │ │ │ └─ 요일 (0-7 = 일요일, 1 = 월요일)
│ │ │ └──── 월 (1-12)
│ │ └─────── 일 (1-31)
│ └────────── 시 (0-23)
└───────────── 분 (0-59)
자주 사용하는 예제
- 매일 새벽 3시 30분에 실행
bash30 3 * * * /usr/local/bin/backup.sh
- 5분마다 실행
bash*/5 * * * * /usr/local/bin/job.sh
- 매주 월요일 오전 9시에 실행
bash0 9 * * 1 /usr/local/bin/weekly.sh
특수 표현
*: 모든 값*/5: 5 단위(step)마다1-5: 1부터 5까지(range)
이 조합만 익혀도 대부분의 cron 작업을 작성할 수 있습니다.
cron 사용 시 주의할 점
cron 환경은 일반 쉘과 다르다는 점을 반드시 인지해야 합니다.
- PATH 환경 변수가 제한적임
- 상대 경로 사용 시 오류 발생 가능
- 실행 파일은 절대 경로로 지정하는 것이 안전함
따라서 cron에서는 다음과 같은 습관이 중요합니다.
- 명령어와 스크립트는 절대 경로 사용
- 필요한 환경 변수는 스크립트 내부에서 직접 설정
- 로그 출력을 통해 실행 여부 확인
at 명령어
at은 한 번만 실행되는 예약 작업을 등록할 때 사용합니다.
예를 들어, 특정 시각에 한 번만 스크립트를 실행해야 할 때 적합합니다.
bashat 23:00
at> /usr/local/bin/oneshot.sh
at> Ctrl+D
반복 실행에는 적합하지 않으며,
주기적인 작업에는 cron을 사용합니다.
Anacron 이란
anacron은 항상 켜져 있지 않은 시스템을 위한 스케줄러입니다.
서버와 달리 노트북이나 개인 PC는
정해진 시간에 꺼져 있는 경우가 많습니다.
이 경우 cron 작업은 실행되지 않고 그대로 놓치게 됩니다.
anacron은 이러한 문제를 보완합니다.
anacron의 특징
- 시스템이 꺼져 있던 동안 놓친 작업을 부팅 후 실행
- 하루 단위 이상의 작업만 지원 (분, 시간 단위 불가)
- root 권한으로 동작
- 시스템 전역 작업에 사용
로그 정리, 주간 백업처럼
"반드시 하루에 한 번 이상 실행되어야 하는 작업"에 적합합니다.
마치며
cron은 리눅스 시스템 관리에서 반드시 익혀야 할 핵심 도구입니다.
처음에는 문법이 다소 복잡하게 느껴질 수 있지만,
몇 가지 패턴만 익히면 반복 작업 관리가 훨씬 수월해집니다.
cron, at, anacron의 역할을 구분해서 사용한다면
시스템 작업을 보다 안정적으로 운영할 수 있습니다.