리눅스 명령어 알아보자 - Crontab 편

✅ Crontab이란?

Crontab은 리눅스에서 특정 시간에 특정 작업을 자동으로 실행하도록 예약하는 스케줄러이다.

예를 들어, 매일 자정에 백업 스크립트를 실행하거나, 매주 월요일 오전 9시에 리포트를 생성하는 작업을 사람이 직접 실행하지 않아도 자동으로 처리할 수 있다.


✅ 기본 명령어

명령어 설명
crontab -e 크론탭 편집 (등록/수정)
crontab -l 등록된 크론탭 목록 확인
crontab -r 크론탭 전체 삭제 * 사용 주의 *

💡 crontab -e 실행 시 vi 에디터가 열린다.

  • :wq → 저장 후 종료
  • :q! → 저장 없이 강제 종료

✅ 크론탭 문법 구조

*  *  *  *  *  실행할_명령어
│  │  │  │  │
│  │  │  │  └── 요일 (0~7, 0과 7은 일요일)
│  │  │  └───── 월 (1~12)
│  │  └──────── 일 (1~31)
│  └─────────── 시간 (0~23)
└────────────── 분 (0~59)

* 는 "모든" 을 의미한다. * * * * * = 매분, 매시, 매일, 매월, 매요일 → 즉 1분마다 실행


✅ 자주 쓰는 예제 모음

🔹 매 분마다 실행

* * * * * /home/FILE_NAME.sh

🔹 매 시간 정각에 실행

0 * * * * /home/FILE_NAME.sh

🔹 매일 오후 2시 10분에 실행

10 14 * * * /home/FILE_NAME.sh

🔹 오전 10시,오전 12시,오후 2시에 실행 (쉼표로 여러 시간 지정)

0 10,12,14 * * * /home/FILE_NAME.sh

🔹 평일(월~금) 오전 8시~오후 5시, 매 시간 정각에 실행

0 8-17 * * 1-5 /home/FILE_NAME.sh

🔹 매일 새벽 1시 0분~30분 동안 매분 실행

0-30 1 * * * /home/FILE_NAME.sh

🔹 30분마다 실행 (*/n = n마다 반복)

*/30 * * * * /home/FILE_NAME.sh

✅ 로그 남기기

실행 결과를 파일로 저장해두면 나중에 확인할 때 편리하다.

* * * * * /home/test.sh > /home/logs/test.log 2>&1

2>&1 : 에러 메시지도 함께 로그 파일에 저장된다.

📁 로그 파일 생성 관련 주의사항

상황 결과
로그 파일이 없는 경우 자동으로 생성됨 ✅
로그 파일이 있고 쓰기 권한이 있는 경우 정상 동작 ✅
로그 파일이 있고 쓰기 권한이 없는 경우 에러 발생 ❌
상위 디렉터리가 없는 경우 에러 발생 ❌

🔧 디렉터리 & 권한 설정

# 로그 디렉터리 생성 (-p 옵션 : 이미 존재해도 에러 없이 넘어감)
mkdir -p /home/logs

# 로그 파일 권한 확인
ls -l /home/logs/test.log

# 쓰기 권한 부여
chmod 644 /home/logs/test.log

 

또는 크론탭에서 디렉터리 생성까지 한번에 처리할 수도 있다.

* * * * * mkdir -p /home/logs && /home/test.sh > /home/logs/test.log 2>&1

💡 추가로 주의할 점

  • cron은 root 또는 특정 유저 권한으로 실행되는 경우가 많다.
  • 로그 파일 소유자와 cron 실행 유저가 다르면 권한 문제가 생길 수 있다.
  • ls -l 로 파일 소유자도 함께 확인해두는 것이 좋다.

 


✅ 실행 시간 제한 걸기 (timeout)

특정 시간이 지나면 자동으로 종료되도록 설정할 수 있다.

# 매일 23시 30분에 실행하되, 5시간(18000초) 후 자동 종료
30 23 * * * timeout 18000 /home/FILE_NAME.sh

✅ 크론탭 백업하기

실수로 -r 명령어를 입력하면 전부 삭제된다. 백업 습관을 들여두자.

# 매일 23시 50분에 크론탭 목록을 파일로 백업
50 23 * * * crontab -l > /home/bk/crontab_bak.txt

✅ 크론탭 기호 정리

기호 의미 예시
* 모든 값 * * * * *
, 여러 값 지정 1,3,5 (1, 3, 5에 실행)
- 범위 지정 1-5 (1부터 5까지)
*/n n마다 반복 */10 (10분마다)

✅ 크론 요일 번호 표준

번호 요일
0 또는 7 일요일
1 월요일
2 화요일
3 수요일
4 목요일
5 금요일
6 토요일

🚨 주의사항

  • crontab -r 은 전체 삭제다. -e 와 헷갈리지 않도록 주의하자.
  • 스크립트 경로는 절대경로를 사용하는 것이 안전하다. (./FILE_NAME.sh ❌ → /home/user/FILE_NAME.sh ✅)
  • 크론탭은 환경변수가 제한적이므로, 스크립트 내부에 필요한 경로를 직접 명시해두는 것이 좋다.