crontab이란?

crontab은 리눅스에서 주기적으로 실행할 명령어나 스크립트를 예약하는 데 사용하는 도구입니다.

백업, 로그 정리, 시스템 모니터링, 자동 업데이트 등 반복 작업을 자동화할 때 사용됩니다.

- cron은 데몬이며(cround), crontab은 이를 설정하기 위한 명령어 및 파일입니다.

- 사용자는 각자 자신의 crontab 파일을 가질 수 있고, 시스템 전체에 영향을 주는 root crontab도 존재합니다.

 

crontab 기본 문법

*  *  *  *  *  명령어
│  │  │  │  │
│  │  │  │  └─ 요일 (0~7) [일요일=0 또는 7]
│  │  │  └──── 월 (1~12)
│  │  └─────── 일 (1~31)
│  └────────── 시 (0~23)
└───────────── 분 (0~59)

 

예시:

주기  예시 crontab 설명
매일 2시 0 2 * * * 
/home/user/backup.sh
매일 새벽 2시에 백업 스크립트 실행
매일 5분 */5 * * * * /usr/bin/sync 5분마다 동기화 명령 실행
매주 월요일 1시 0 1 * * 1
/home.user/clean_logs.sh
매주 월요일 로그 정리

 

crontab 사용 방법

1. crontab 파일 열기

crontab -e

 

2. 현재 사용자 crontab 보기

crontab -l

 

3. crontab 삭제

crontab -r

 

4. 특정 시간대 작업 예시

# 매일 자정 로그 파일 백업
0 0 * * * cp /var/log/syslog /home/user/syslog_backup_$(date +\%F).log

 

팁 : 로그 남기기

cron은 출력을 /dev/null로 무시하거나 로그를 저장할 수 있습니다.

0 0 * * * /home/user/script.sh >> /home/user/cron.log 2>&1
# >> : 표준 출력(성공 메시지) 로그 저장
# 2>&1 : 표준 에러도 같은 로그 파일로 저장

 

cron에서 자주 발생하는 실수

문제 원인
명령이 실행되지 않음 환경변수(PATH 등)가 부족함
date 명령이 안됨 변수 확장을 위해 \로 이스케이프 필요
경로 오류  절대 경로를 써야 함 (예: ./script.sh -> /home/usr/script.sh)

 

crontab의 환경과 PATH

cron은 사용자 로그인 없는 상태에서 실행되기 때문에, ~/.bashrc 등의 설정이 적용되지 않습니다.

따라서 스크립트 상단에 필요한 환경 변수를 직접 선언해주어야 할 수 있습니다.

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

 

crontab 접근 제어

- /etc/cron.allow > 해당 파일에 있는 사용자만 사용 가능

- /etc/cron.deny > 해당 파일에 있는 사용자는 사용 불가

(두 파일 모두 없다면 모든 사용자가 사용 가능)

 

마무리 

crontab은 리눅스 시스템을 운영할 때 필수적인 도구 중 하나입니다.

주기적인 작업을 자동화하면 생산성이 향상되고, 수동 작업에서 발생할 수 있는 실수를 줄일 수 있습니다.

+ Recent posts