리눅스 crontab 스케줄링

1. Crontab 정의

  • crontab은 리눅스 및 유닉스 계열 운영체제에서 주기적으로 명령어나 스크립트를 실행하기 위해 사용하는 스케줄링 도구입니다.
  • cron은 시스템의 백그라운드에서 동작하며, 정해진 시간과 주기에 따라 사용자나 시스템의 작업을 자동으로 수행합니다.
  • crontab은 이러한 작업을 설정하고 관리하는 데 사용되는 파일 또는 명령어를 의미합니다.
  • 주로 시스템 Batch 시스템에 사용되며 crontab을 사용하면 시스템 관리 및 반복 작업을 자동화 할 수 있습니다.

1.1. 1. 기본 개념과 구조

crontab 파일에는 작업 스케줄과 실행할 명령어가 포함되어 있습니다.

1
2
3
4
5
6
7
8
* * * * * command
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ └─ 요일 (0-7, 0과 7은 일요일)
│ │ │ └── 월 (1-12)
│ │ └─── 일 (1-31)
│ └──── 시 (0-23)
└───── 분 (0-59)
  • * (별표)는 모든 가능한 값을 의미합니다.
  • 숫자는 해당 시간/날짜에 작업을 실행함을 의미합니다.
  • command는 실행할 명령어 또는 스크립트를 나타냅니다.

예를 들어, 0 2 * * * /path/to/backup.sh는 매일 오전 2시에 backup.sh 스크립트를 실행합니다.

1.2. 2. crontab 명령어

crontab 명령어를 사용하여 작업을 관리할 수 있습니다.

  • crontab -e: 현재 사용자의 crontab 파일을 편집합니다. 기본 텍스트 편집기가 열리며, 여기서 작업을 추가하거나 수정할 수 있습니다.
  • crontab -l: 현재 사용자의 crontab을 목록으로 표시합니다.
  • crontab -r: 현재 사용자의 crontab을 삭제합니다.
  • crontab -u username -e: 다른 사용자의 crontab을 편집합니다(관리자 권한 필요).

1.3. 3. 스케줄 형식 예시

  • 0 0 * * * : 매일 자정(00:00)에 실행.
  • */5 * * * * : 매 5분마다 실행.
  • 0 9 * * 1-5 : 월요일부터 금요일까지 매일 아침 9시에 실행.
  • 0 0 1 * * : 매월 1일 자정에 실행.

1.4. 4. 특별 문자열

crontab은 특별 문자열을 지원하여 일반적인 스케줄링을 더 쉽게 설정할 수 있습니다.

  • @reboot: 시스템이 부팅될 때마다 실행.
  • @daily 또는 @midnight: 매일 자정에 실행.
  • @hourly: 매 시간 정각에 실행.
  • @weekly: 매주 일요일 자정에 실행.
  • @monthly: 매월 1일 자정에 실행.
  • @yearly 또는 @annually: 매년 1월 1일 자정에 실행.

1.5. 5. 환경 변수와 출력

crontab에서 사용되는 명령어는 사용자의 환경 변수를 따릅니다. 필요 시 명시적으로 설정해야 합니다.

1
0 2 * * * /path/to/script.sh > /dev/null 2>&1

위 예시에서 > /dev/null 2>&1는 모든 출력과 오류를 무시할 수 있습니다. 특히 find 명령어를 사용할때 Permission 권한으로 인한 여러 출력오류를 나타나지 않게 할 수 있습니다.

주로 다양한 배치시스템이 백오피스나 매일, 매주, 매달마다 집계가 필요한 시스템 쿼리를 사용해야할 경우, crontab을 사용하면 효율적으로 관리가 가능합니다.