우분투 실전 명령어 | crontab으로 주기 작업 자동화(등록/검증)

언제 쓰는가

서버에서 같은 작업을 반복할 때 가장 먼저 쓰는 게 cron입니다. 예를 들어 로그 정리, 백업 스크립트 실행, 상태 점검 알림처럼 “정해진 시간에 자동 실행”이 필요할 때 유용합니다.

한 번만 실행하고 끝나는 명령보다, 주기적으로 돌아가야 하는 작업이라면 crontab으로 먼저 잡아두는 편이 운영이 훨씬 편해집니다.

바로 쓰는 명령어

# 현재 사용자 크론 목록 확인
crontab -l

# 크론 편집기 열기
crontab -e

# 매일 새벽 3시 30분에 백업 스크립트 실행
30 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

# 5분마다 디스크 사용량 기록
*/5 * * * * /bin/df -h >> /var/log/df-usage.log 2>&1
# root 크론 확인
sudo crontab -l

# 크론 서비스 상태 확인
systemctl status cron --no-pager

# 크론 서비스 자동 시작 설정
sudo systemctl enable --now cron

핵심 옵션/패턴

  • 시간 필드 5개: 분 시 일 월 요일 순서입니다.
  • */5는 5단위 반복(5분마다), 1-5는 범위(월~금), 1,3,5는 목록입니다.
  • 크론은 기본 PATH가 짧아서, 명령어는 가능하면 절대경로(/usr/bin/python3)로 적는 게 안전합니다.
  • 로그를 남길 때는 >> 파일 2>&1을 같이 써서 표준출력/에러를 한 파일로 모읍니다.

자주 하는 실수

  • 스크립트는 정상인데 크론에서만 실패하는 경우: 실행 권한(chmod +x) 또는 PATH 문제인 경우가 많습니다.
  • 상대경로(./script.sh) 사용: 크론 실행 기준 디렉터리가 달라서 실패하기 쉽습니다.
  • 리다이렉션 없이 등록: 실패 원인이 로그에 남지 않아 원인 추적이 어려워집니다.

검증 방법

# 크론에 실제 등록됐는지 확인
crontab -l

# 크론 서비스가 살아있는지 확인
systemctl is-active cron

# 작업 로그 확인
tail -n 30 /var/log/backup.log

# 시스템 로그에서 CRON 실행 흔적 확인
journalctl -u cron -n 50 --no-pager

실행 결과 예시

$ systemctl is-active cron
active

$ crontab -l
30 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
*/5 * * * * /bin/df -h >> /var/log/df-usage.log 2>&1

$ tail -n 5 /var/log/backup.log
[2026-02-18 03:30:01] backup started
[2026-02-18 03:30:06] backup completed (size: 1.2G)

출처

  • Ubuntu Server Guide
  • crontab(5) man page
  • systemd documentation