우분투 실전 명령어 | 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