본문 바로가기
최신 IT 정보

cron job 설정부터 자동화까지 완벽 총정리

by IYIT 2026. 5. 31.

cron job 설정부터 자동화까지 완벽 총정리

📌 이 글의 핵심 요약
  • cron job은 리눅스 서버에서 특정 명령을 정해진 시간에 자동 실행하는 스케줄러다
  • crontab 표현식 5자리만 이해하면 분·시·일·월·요일 단위 세밀한 설정이 가능하다
  • 로그 저장과 에러 알림을 함께 설정해야 실전 자동화가 완성된다
  • Node.js 환경에서는 node-cron 패키지로 코드 안에서 동일하게 구현할 수 있다

cron job이란 무엇인가

서버를 운영하다 보면 매일 새벽에 DB를 백업하거나, 매주 월요일마다 리포트를 이메일로 보내거나, 5분마다 데이터를 수집해야 하는 상황이 생긴다. 이런 반복 작업을 사람이 직접 실행하면 빠짐없이 챙기기 어렵고, 실수도 잦아진다. cron job은 이 문제를 해결하는 리눅스의 시간 기반 스케줄러다.

cron은 유닉스 계열 운영체제에서 오랜 기간 써온 도구로, crontab 파일에 실행 시간과 명령어를 등록해두면 그 시간이 되면 자동으로 실행된다. 서버를 재시작해도 설정이 유지되고, 시스템 수준에서 동작하기 때문에 별도 프로세스를 켜두지 않아도 된다.


crontab 표현식 완전 정복

cron job 설정에서 처음 막히는 부분이 표현식이다. 총 5개 필드로 구성되고 각 자리가 의미하는 시간 단위가 다르다.

# 표현식 구조 분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-7) # 예시 30 6 * * * # 매일 오전 6시 30분 0 0 * * 1 # 매주 월요일 자정 */5 * * * * # 5분마다 0 9 1 * * # 매월 1일 오전 9시

📖 crontab 특수 문자 의미

  • * — 해당 필드 전체. 매 분, 매 시, 매일을 의미
  • */n — n 간격마다 반복. */10이면 10분마다
  • n,m — 여러 값 지정. 1,15이면 1일과 15일
  • n-m — 범위 지정. 1-5이면 월요일~금요일(요일 필드 기준)
  • 요일 0과 7 — 둘 다 일요일을 의미한다
💡 표현식 검증 도구

crontab.guru 사이트에서 표현식을 입력하면 다음 실행 시각을 실시간으로 확인할 수 있다. 처음에는 직접 계산보다 이 도구로 검증하는 게 실수를 줄이는 데 훨씬 효과적이다.


crontab 등록과 관리 방법

cron job 등록은 crontab 명령으로 편집기를 열어 직접 작성한다. 리눅스 서버 터미널에서 아래 명령으로 현재 사용자의 crontab 파일을 열 수 있다.

# crontab 편집기 열기 crontab -e # 등록된 cron job 목록 확인 crontab -l # crontab 전체 삭제 (주의) crontab -r

편집기가 열리면 표현식과 실행할 명령을 한 줄씩 작성한다. 저장하고 나오면 즉시 적용된다. 처음 crontab -e를 실행하면 기본 편집기 선택 화면이 나오는데, nano를 선택하면 진입 장벽이 낮다.

⚠️ 경로 주의사항
cron 환경에서는 PATH 변수가 일반 터미널과 다르게 설정되는 경우가 많다. python이나 node 명령이 동작하지 않으면 절대 경로를 직접 써야 한다. which node 명령으로 실제 경로를 확인한 뒤 /usr/local/bin/node처럼 전체 경로로 입력하면 해결된다.


실전 자동화 예제 모음

자주 쓰는 자동화 패턴을 바로 복사해서 쓸 수 있도록 정리했다.

⚙️ 실무에서 자주 쓰는 cron job 예제
# 매일 새벽 2시 DB 백업 0 2 * * * /home/ubuntu/scripts/backup.sh # 매주 월요일 오전 9시 리포트 발송 0 9 * * 1 /usr/local/bin/node /home/ubuntu/report.js # 5분마다 서버 상태 체크 */5 * * * * /home/ubuntu/scripts/healthcheck.sh # 매월 1일 자정 로그 정리 0 0 1 * * /home/ubuntu/scripts/clean-logs.sh # 평일 오전 8시 뉴스레터 발송 0 8 * * 1-5 /usr/local/bin/python3 /home/ubuntu/newsletter.py

Node.js에서 node-cron으로 구현하기

서버 코드 안에서 스케줄을 관리하고 싶다면 node-cron 패키지를 쓴다. crontab 표현식을 그대로 사용하면서 JavaScript 함수를 실행할 수 있다.

# 설치 npm install node-cron # 사용 예시 const cron = require('node-cron'); cron.schedule('0 9 * * 1', () => { console.log('매주 월요일 9시 실행'); sendWeeklyReport(); });

로그 관리와 실패 대응

cron job은 기본적으로 실행 결과를 눈으로 확인하기 어렵다. 어떤 작업이 성공했고 어디서 실패했는지 추적하려면 처음부터 로그를 파일로 저장하는 습관을 들여야 한다.

# 표준 출력과 에러를 모두 로그 파일에 저장 0 2 * * * /home/ubuntu/backup.sh >> /var/log/backup.log 2>&1 # 날짜별 로그 파일로 분리 0 2 * * * /home/ubuntu/backup.sh >> /var/log/backup-$(date +\%Y\%m\%d).log 2>&1

2>&1은 표준 에러(stderr)를 표준 출력(stdout)과 같은 파일로 합치는 구문이다. 이걸 빠뜨리면 에러 메시지가 로그에 남지 않아 실패 원인을 파악하기 어렵다. 로그가 쌓이면 용량 문제가 생기므로 logrotate 설정을 함께 적용하는 게 좋다.


정리 및 결론

cron job 핵심 정리

  • crontab 5자리 표현식: 분 · 시 · 일 · 월 · 요일 순서로 작성
  • crontab -e로 등록, crontab -l로 확인, 저장 즉시 적용
  • 명령어 경로는 절대 경로로 지정해야 PATH 문제를 피할 수 있다
  • >> 로그파일 2>&1 추가로 성공·실패 이력 모두 저장
  • Node.js 환경이라면 node-cron 패키지로 코드 안에서 동일하게 구현 가능

cron job 하나만 제대로 설정해도 반복 업무의 상당 부분을 서버에 위임할 수 있다. 처음엔 표현식이 낯설지만 crontab.guru로 검증하는 습관을 들이면 금방 익숙해진다.