리눅스 크론탭 설치와 사용법 - crontab

크론탭은 리눅스와 유닉스 기반 시스템에서 주기적으로 작업을 실행하기 위한 시스템 스케줄러입니다. 윈도우 환경의 "작업 스케줄러"와 같은 기능을 합니다.

크론탭을 사용하면 주기적으로, 또는 정해진 시각에 실행해야 하는 여러가지 리눅스 작업들을 자동 실행되도록 설정할 수 있습니다.

크론탭 설치

패키지 매니저로 크론탭을 설치합니다. 우분투 기준입니다.

sudo apt update
sudo apt install cron

센토스는 패키지 매니저가 yum이므로 다음 커맨드로 설치합니다. 크론 패키지 이름이 다르므로 주의해야 합니다.

sudo yum update
sudo yum install cronie

크론 서비스를 시작하고 데몬을 활성화 해서 백그라운드로 크론탭 작업이 실행되도록 합니다.

sudo service cron start
sudo systemctl enable cron.service

센토스는 다음 커맨드로 서비스를 등록합니다. 데몬 이름이 "crond" 입니다.

sudo systemctl start crond
sudo systemctl enable crond

크론 서비스가 정상 실행중인지 확인합니다. 크론 데몬을 활성화 하지 않으면 재부팅 할 때마다 크론을 실행해야 합니다.

cron.service가 모두 "enabled"이고 크론 서비스 상태가 "Active: active (running)" 이어야 합니다.

sudo systemctl status cron
● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2024-03-23 16:30:52 UTC; 2 days ago
       Docs: man:cron(8)
   Main PID: 949 (cron)
      Tasks: 1 (limit: 4421)
     Memory: 508.0K
        CPU: 4.783s
     CGroup: /system.slice/cron.service
             └─949 /usr/sbin/cron -f -P
...

크론탭 작업 추가

크론탭 기본 명령어

  1. crontab -l : 크론탭에 등록된 작업 목록 출력
  2. crontab -r : 등록된 모든 크론탭 작업 삭제
  3. crontab -e : 크론탭 작업 편집. 편집기를 사용해 크론탭 작업 목록을 편집합니다.

크론탭 기본 문법

크론탭은 다음과 같은 형식으로 작업을 정의합니다.

분 시 일 월 요일 실행할명령

예를 들어, 30 0 * * * /home/ubuntu/dailybackup.sh 작업은 매일 오전 0시 30분에 /home/ubuntu/dailybackup.sh bash 스크립트를 실행합니다.

작업 정의에 사용하는 항목들이 가질 수 있는 값의 범위는 다음과 같습니다.

  1. 크론탭 예약 시간 범위:
    • : 0부터 59까지의 값을 가집니다.
    • : 0부터 23까지의 값을 가집니다.
    • : 1부터 31까지의 값을 가집니다.
    • : 1부터 12까지의 값을 가집니다.
    • 요일: 0부터 7까지의 값을 가집니다. (0과 7은 일요일을 나타냅니다.)
  2. 특수 문자:
    • *: 허용되는 가능한 모든 값.
    • -: 범위를 나타냅니다. 예를 들어, 1-15는 1부터 15까지의 값을 나타냅니다.
    • ,: 여러 값을 나열. 예를 들어, 1,3,5,7은 1, 3, 5, 7을 나타냅니다.
    • /: 간격을 나타냅니다. 예를 들어, */30는 30분 간격으로 실행합니다.

크론탭 작업 편집

크론탭 작업 편집 커맨드를 실행하면 사용할 에디터 선택 화면이 표시됩니다. 선호하는 편집기를 선택하면 됩니다.

crontab -e
no crontab for ubuntu - using an empty one
Select an editor. To change later, run 'select-editor'.
/bin/nano <-— easiest
/usr/bin/vim.basic
/usr/bin/vim.tiny
/bin/ed
Choose 1-4 [1]:

nano로 처음 크론탭 파일을 열면 다음과 같습니다. 기본적인 사용 방법에 대한 안내와 사용 예가 있습니다. 맨 앞의 "#"주석 표시입니다.

생성한 크론탭 작업을 일시적으로 사용하고 싶지 않으면 앞에 "#"을 붙여서 작업을 삭제하지 않고도 실행하지 않도록 할 수 있습니다.

주석을 모두 지우고 새 행에 다음 크론 작업을 입력합니다. 다음 작업은 "/home/ubuntu/daily-backup-script.sh" bash 스크립트를 새벽 3시에 하루 한번씩 실행합니다. 시, 분, 일, 월 설정 값은 간격이 아닙니다. 주의해야 합니다.

0 3 * * * /home/ubuntu/daily-backup-script.sh

파일을 저장하고 빠져나옵니다.

크론탭 작업 확인

현재 등록된 크론탭 목록을 확인하려면 crontab -l 명령어를 사용합니다. 등록된 크론탭 작업이 출력됩니다. 정확하게는 크론탭 편집기로 입력한 파일의 내용이 출력됩니다.

crontab -l
0 3 * * * /home/ubuntu/daily-backup-script.sh

크론탭 작업 실행 테스트

크론탭 작업 예

  • 매 1분마다 /path/to/db_server_backup.sh bash 스크립트를 실행하고 실행 결과는 "/dev/null"로 출력합니다. "/dev/null"은 널 출력으로 커맨드 실행 결과를 출력하지 않는 것입니다.

    * * * * * /path/to/db_server_backup.sh &> /dev/null
  • 월요일부터 금요일까지 매 1시간에 한 번씩 /home/scheduler/log_maintenance.sh bash 스크립트를 실행합니다. 일정 시간 간격으로, 또는 특정 요일에만 반복되는 작업을 실행합니다. 1-5는 월, 화, 수, 목, 금요일입니다.

    * */1 * * 1-5 /home/scheduler/log_maintenance.sh

  • 매일 새벽 3시에 한번 rsync로 /home/ghost/contents/ 디렉토리를 myserver.com의 backup계정의 홈폴더로 압축 백업합니다. 크론탭 커맨드의 실행 프로그램은 절대 경로로 표시해야 합니다. 크론탭으로 스캐줄 작업을 실행할 때는 PAHT 환경 변수의 값을 읽지 못합니다.

    0 3 * * * /usr/bin/rsync -arz /home/ghost/contents/ backup@myserver.com:.
  • 매주 금요일 야간 11시 45분에 log_backup.sh 스크립트를 실행

    45 23 * * 5 /home/crontab/log_backup.sh

크론탭 로깅

크론탭이 실행한 작업의 로그는 일반적으로 /var/log/syslog 또는 /var/log/cron 파일에 기록됩니다. 필요에 따라 해당 파일을 확인하여 작업 실행 로그를 확인할 수 있습니다.

위의 단계를 따라서 크론탭을 사용하여 원하는 작업을 예약하고 실행할 수 있습니다.