CertNote/ 출퇴근 학습 노트
로드맵
KOEN
리눅스마스터 2급 · 2급리눅스마스터 2급
리눅스마스터 1급 · 1급리눅스마스터 1급
  • Week 1
    • 1.운영체제와 리눅스: 커널이 하는 일
    • 2.자유 소프트웨어와 배포판: 라이선스가 만든 생태계
    • 3.설치와 부팅: 전원을 켜는 순간부터
    • 4.파일시스템 구조와 파일의 종류: 모든 것은 파일이다
    • 5.Week 1 종합 복습: 개념을 꿰뚫는 시간
  • Week 2
  • Week 3
  • Week 4
  • Week 5
  • Week 6
    • 1.프로세스 관리: PID부터 시그널·우선순위까지
    • 2.데몬과 프로세스 생애: fork·exec부터 좀비·고아까지
    • 3.시스템 초기화: init·런레벨에서 systemd·target까지
    • 4.작업 예약: cron의 5필드부터 at·batch까지
    • 5.Week 6 종합 복습: 프로세스·초기화·예약을 한 장으로 꿰기
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
  • Week 12
  • Week 13
  • Week 14
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← 리눅스마스터 1급/Week 6/Day 4

기준: 리눅스마스터 1급 출제 기준·오류 제보

리눅스마스터 1급· AssociateWeek 6 · Day 4읽기 약 10분
핵심 정리
  • 예약 도구는 두 갈래 — 반복은 cron(crond), 1회성은 at·batch(atd).
  • crontab 5필드 순서는 "분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-7)". 요일은 0과 7 둘 다 일요일, 시각은 24시간제.
  • 기호는 *(전체) ,(나열) -(범위) /(간격). 일과 요일을 동시에 지정하면 AND가 아니라 OR로 동작한다.
  • 사용자 crontab은 5필드, 시스템 crontab(/etc/crontab·/etc/cron.d/)은 사용자 필드가 붙어 6필드.
  • 접근 제어는 allow > deny — cron.allow가 있으면 그 목록만 허용되고 cron.deny는 무시된다.

Day 4 - 작업 예약: cron의 5필드부터 at·batch까지

cron의 구조 — crond 데몬과 crontab

  • cron은 반복 작업을 예약하는 시스템이다.
  • 백그라운드 데몬 crond가 1분마다 깨어나 모든 사용자의 예약 목록을 확인하고, 실행 시각이 된 작업을 실행한다.
  • 예약 목록을 담는 파일·테이블을 crontab(cron table)이라 부른다.
  • 사용자별 crontab을 관리하는 명령이 crontab이다.
명령동작
crontab -e내 crontab 편집(없으면 새로 생성)
crontab -l내 crontab 목록 출력
crontab -r내 crontab 전체 삭제
crontab -u user -e특정 사용자의 crontab 편집(root)
crontab -e              # 편집기로 내 예약 작업 추가/수정
crontab -l              # 현재 등록된 예약 작업 보기
crontab -r              # 모든 예약 작업 삭제(주의!)
crontab -u alice -l     # alice의 예약 작업 보기(root 권한)

⚠️ 함정: crontab -r은 확인 없이 전체를 삭제한다. 편집하려던 -e를 키보드에서 한 칸 옆 -r로 잘못 누르면 모든 예약이 날아간다. 실무에서는 crontab -l > backup.txt로 백업 후 작업하는 습관이 권장된다. -l(목록)·-e(편집)·-r(삭제)을 명확히 구분해야 한다.

crontab의 5필드 — 시간 표기의 핵심

  • crontab 한 줄 = 5개의 시간 필드 + 실행할 명령. 이 5필드의 순서와 범위가 시험의 절대 핵심이다.
┌───────────── 분 (minute,   0-59)
│ ┌─────────── 시 (hour,     0-23)
│ │ ┌───────── 일 (day,      1-31)
│ │ │ ┌─────── 월 (month,    1-12)
│ │ │ │ ┌───── 요일 (weekday, 0-7, 0과 7 모두 일요일)
│ │ │ │ │
* * * * *  실행할_명령
위치필드범위비고
1분(minute)0-59
2시(hour)0-2324시간제
3일(day of month)1-31
4월(month)1-12jan-dec도 가능
5요일(day of week)0-70과 7 = 일요일, 1=월 … 6=토
  • 특수 문자로 패턴을 표현한다.
기호의미예
*모든 값* * * * * = 매분
,나열0,30 = 0분과 30분
-범위1-5 = 1~5
/간격(step)*/10 = 10마다
  • 실전 예시로 패턴을 익힌다.
# 분 시 일 월 요일  명령
  0  3  *  *  *    /backup.sh        # 매일 새벽 3시 0분
  30 2  *  *  1    /weekly.sh        # 매주 월요일 새벽 2시 30분
  0  */6 * *  *    /check.sh         # 6시간마다(0,6,12,18시)
  */10 * * *  *    /poll.sh          # 10분마다
  0  0  1  *  *    /monthly.sh       # 매월 1일 자정
  0  9  *  *  1-5  /workday.sh       # 평일(월~금) 오전 9시
  15 14 1  *  *    /report.sh        # 매월 1일 14시 15분

5필드 순서는 "분-시-일-월-요일"이며 시간 단위가 작은 것부터 큰 것 순이다(요일만 예외로 맨 뒤). 요일은 0=일요일에서 시작해 6=토요일이고, 7도 일요일로 인정된다. 24시간제이므로 오후 2시는 14다. 이 순서를 "분시일월요"로 외운다.

⚠️ 함정: 일(3번째)과 요일(5번째)을 둘 다 지정하면 OR로 동작한다 — 둘 중 하나라도 맞으면 실행된다. 예를 들어 0 0 13 * 5는 "매월 13일 또는 매주 금요일"마다 실행되지(둘 다 만족하는 13일의 금요일만이 아님), AND가 아니다. 이 OR 동작은 함정이 되기 쉽다.

직접 쳐보기: crontab -e로 */2 * * * * date >> ~/crontest.log 한 줄을 넣고 저장한다. 2분마다 현재 시각이 파일에 쌓인다. 몇 분 뒤 cat ~/crontest.log로 누적을 확인하고, 다 봤으면 crontab -e에서 그 줄을 지운다. 5필드가 실제로 어떻게 도는지 눈으로 본다.

시스템 crontab — /etc/crontab과 cron.d

  • 사용자 crontab(crontab -e)과 별개로 시스템 전역 예약을 두는 곳이 있다 — /etc/crontab 파일과 /etc/cron.d/ 디렉터리.
  • 결정적 차이는 사용자(user) 필드가 하나 더 있다는 점이다.
  • 이유: 사용자 crontab은 등록자 권한으로 돌지만, 시스템 crontab은 어느 사용자 권한으로 실행할지 명시해야 하기 때문.
# /etc/crontab 형식 (필드 6개 = 5시간필드 + 사용자 + 명령)
# 분 시 일 월 요일  사용자  명령
  0  4  *  *  *    root    /usr/local/bin/cleanup.sh
위치사용자 crontab시스템 crontab(/etc/crontab)
만드는 법crontab -e파일 직접 편집
필드 수5필드 + 명령5필드 + 사용자 + 명령
실행 권한등록한 사용자지정한 사용자 필드
저장 위치/var/spool/cron/사용자명/etc/crontab, /etc/cron.d/*
  • 정해진 주기별 디렉터리도 있다. 시각을 적지 않고 스크립트를 넣어두기만 하면 자동 실행된다.
디렉터리실행 주기
/etc/cron.hourly/매시간
/etc/cron.daily/매일
/etc/cron.weekly/매주
/etc/cron.monthly/매월

사용자 crontab은 5필드, 시스템 crontab(/etc/crontab·cron.d)은 6필드(사용자 추가)라는 차이가 핵심 출제 포인트다. /etc/cron.d/는 패키지가 자기 예약을 추가하기 좋은 곳으로, /etc/crontab과 같은 6필드 형식을 쓴다. cron.daily 같은 디렉터리는 시각을 적지 않고 스크립트만 넣는다(실행 시각은 anacron/시스템이 관리).

cron은 그리스어 'chronos'(시간)에서 왔다. 1970년대 유닉스부터 있었고, 노트북처럼 항상 켜져 있지 않은 시스템을 위해 anacron이 추가되었다 — cron은 정확히 그 시각에 꺼져 있으면 작업을 건너뛰지만, anacron은 "마지막 실행 후 N일 지났으면 켜진 직후에라도 실행"한다. cron.daily 등이 anacron과 연동되는 이유다.

접근 제어 — cron.allow와 cron.deny

  • 누가 cron을 쓸 수 있는지는 두 파일로 제어한다.
파일의미
/etc/cron.allow여기 적힌 사용자만 cron 사용 가능(화이트리스트)
/etc/cron.deny여기 적힌 사용자만 cron 사용 불가(블랙리스트)
  • 판정 규칙:
    • cron.allow가 존재하면 그 목록만 허용되고 cron.deny는 무시된다.
    • cron.allow가 없고 cron.deny만 있으면 deny 목록 외 전원 허용.
    • 둘 다 없으면 보통 root만(또는 배포판에 따라 전원) 허용된다.

우선순위는 allow > deny다. allow 파일이 존재하는 순간 그것이 유일한 기준이 되어 deny는 효력을 잃는다. at도 동일하게 /etc/at.allow·/etc/at.deny로 제어된다.

한 번만 실행 — at과 batch

  • cron이 "반복"이라면 at은 "딱 한 번"이다. 지정한 시각에 명령을 한 번 실행하고 큐에서 사라진다.
at 17:00                  # 오후 5시에 실행할 명령 입력 모드
at> /usr/local/bin/report.sh
at> <Ctrl+D로 입력 종료>
 
at now + 2 hours          # 지금부터 2시간 뒤
at 10:30 tomorrow         # 내일 오전 10시 30분
at midnight               # 오늘 자정
echo "/backup.sh" | at 3am  # 파이프로 명령 전달
  • at 작업을 관리하는 명령이 따로 있다.
명령동작
at 시각그 시각에 실행할 작업 등록
atq (또는 at -l)대기 중인 at 작업 목록
atrm 번호 (또는 at -d)대기 작업 삭제
  • batch는 at의 변형이다. 시각을 지정하지 않고 시스템 부하(load average)가 낮아지면(보통 0.8 미만) 자동 실행한다.
  • 용도: CPU가 한가할 때 무거운 작업을 돌리고 싶을 때.
batch                     # 시스템이 한가해지면 실행
at> /heavy-compute.sh
at> <Ctrl+D>
구분cronatbatch
실행 횟수반복1회1회
실행 시점정해진 주기지정 시각부하 낮을 때
데몬crondatdatd
등록crontab -eat 시각batch

cron은 반복, at/batch는 1회성이다. "매일 새벽 백업"은 cron, "내일 한 번만 점검"은 at이다. at은 입력을 Ctrl+D(EOF)로 끝내며, 등록 목록은 atq, 삭제는 atrm이다(at -l/at -d도 동일). batch는 시각이 아니라 부하를 기준으로 실행한다는 점이 at과의 차이다.

직접 쳐보기: echo "echo hello > ~/at-test.txt" | at now + 1 minute을 실행하고 atq로 대기 목록을 확인한다. 1분 뒤 cat ~/at-test.txt에 hello가 적혀 있으면 성공이고, atq에서는 작업이 사라진다(1회성 확인). 취소하려면 atq로 번호를 보고 atrm 번호.

📖 용어

  • crond : 1분마다 깨어나 예약 목록을 검사하고 시각이 된 작업을 실행하는 데몬.
  • crontab : 예약 목록을 담은 테이블. -e(편집) -l(목록) -r(전체 삭제, 확인 없음)로 다룬다.
  • 5필드 : 분-시-일-월-요일 순서의 시간 표기. "분시일월요"로 외운다.
  • step(/) : 간격 지정 기호. */10은 "10마다"라는 뜻이다.
  • 일·요일 OR 규칙 : 3번째(일)와 5번째(요일)를 둘 다 적으면 둘 중 하나만 맞아도 실행된다.
  • 시스템 crontab : /etc/crontab·/etc/cron.d/*. 시간 5필드 뒤에 실행 사용자 필드가 붙어 6필드다.
  • /etc/cron.daily/ 등 : 시각 없이 스크립트만 넣어두면 그 주기로 실행되는 디렉터리.
  • anacron : 항상 켜져 있지 않은 시스템용. cron이 건너뛴 작업을 "켜진 직후에라도" 실행한다.
  • cron.allow / cron.deny : 사용 허가 화이트리스트 / 금지 블랙리스트. allow가 있으면 deny는 무시된다.
  • at : 지정한 시각에 딱 한 번 실행하고 큐에서 사라지는 1회성 예약. 목록은 atq, 삭제는 atrm.
  • batch : 시각이 아니라 시스템 부하가 낮아질 때 한 번 실행하는 at의 변형.
  • atd : at·batch 작업을 처리하는 데몬. crond와 별개다.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

crontab의 시간 필드 5개를 왼쪽부터 순서대로 바르게 나열한 것은?

문제 2

crontab 항목 30 2 * * 1 /backup.sh가 실행되는 시점으로 옳은 것은?

문제 3

crontab 요일 필드에서 일요일을 나타내는 값으로 모두 옳은 것은?

문제 4

*/15 * * * *로 예약된 작업의 실행 주기로 옳은 것은?

문제 5

사용자 crontab(crontab -e)과 시스템 crontab(/etc/crontab)의 가장 큰 형식 차이는?

문제 6

cron 접근 제어 파일 /etc/cron.allow와 /etc/cron.deny의 우선순위에 대한 설명으로 옳은 것은?

문제 7

cron, at, batch의 차이에 대한 설명으로 옳은 것은?

이전시스템 초기화: init·런레벨에서 systemd·target까지Week 6 · Day 3다음 Week 6 종합 복습: 프로세스·초기화·예약을 한 장으로 꿰기Week 6 · Day 5

참고 공식 자료

  • 리눅스마스터 1급 공식 출제 기준(새 탭에서 열림)

이 페이지

  • cron의 구조 — crond 데몬과 crontab
  • crontab의 5필드 — 시간 표기의 핵심
  • 시스템 crontab — /etc/crontab과 cron.d
  • 접근 제어 — cron.allow와 cron.deny
  • 한 번만 실행 — at과 batch
  • 용어
  • 연습 문제