본문 바로가기
Linux/Chrontab

Linux 크론탭으로 작업 예약 마스터하기: Crontab 스케쥴링

by Developer88 2024. 4. 10.
반응형

특정한 시간에 스크립트로 작성한 작업들을 실행시키도록 하려고 할 때,

필요한 것이 리눅스의 크론탭인데요.

오늘은 이것을 활용하여 작업을 예약하는 방법에 대해서 정리해 보겠습니다.

 

1. Crontab(크론탭)

1-1. Crontab

crontab은 유닉스 기반 시스템에서 반복적인 작업을 스케줄링하기 위해 사용되는 유틸리티입니다. 

crontab의 이름은 "cron table"의 줄임말인데요.

시간 기반 작업 스케줄러인 cron이 참조하는 설정 파일을 관리합니다.

 

쉽게 말해서 Crontab은 특정 시간, 날짜, 간격에 자동으로 스크립트나 프로그램을 실행하도록 스케줄을 설정해서,

미래의 반복적인 작업을 자동화 할 수 있게 도와줍니다.

 

1-2. 스크립트

크론탭을 정해진 시간에 실행하기 위해서,

실행할 스크립트를 준비하겠습니다.

(명령어를 등록해 사용할 수도 있습니다.)

일반적으로 크론탭(crontab)은 기본적으로 /bin/sh를 사용하여 스크립트를 실행합니다.

 

이 글에서는 아래 스크립트를,

'~/script/backup.sh' 파일로 저장한 후 이용하도록 하겠습니다.

 

#!/bin/bash

current_date=$(date)

# 로그 파일에 날짜와 시간을 추가해 기록
echo "현재 날짜와 시간: $current_date" >> ~/cron_test.log

 

위에서 사용된 >>는 리다이렉션 연산자로, 

출력을 파일에 추가하는 역할을 합니다. 

이 연산자를 사용하면 기존 파일에 내용을 추가할 수 있습니다.

위에서는 cron_test.log파일에 "현재 날짜와 시간: $current_data"를 추가해 줍니다.

 

1-3. 스크립트 실행권한 확인

스크립트 파일이 실행권한이 있는지 아래 명령어를 통해서 확인해 봅니다.

 

ls -l backup.sh

 

실행을 하였는데, '-rw-r--r-- ' 과 같이 나왔다면,

실행권한이 없다는 뜻입니다.

 

ls -l 명령어를 실행하면 나오는 기호들의 첫 4자리들은 다음의 의미를 갖습니다.

  • -: 파일이면 '-', 디렉토리면 'd'
  • r: 읽기 권한
  • w: 쓰기 권한
  • x: 실행(execute)권한

네 번째의 x 자리가 '-'로 나왔다면 실행권한이 없다는 뜻 입니다.

 

아래 명령어를 실행해서 해당 스크립트 파일에 실행권한을 부여합니다.

 

chmod +x backup.sh

 

 

2. Crontab(크론탭) 실행

아래 명령어를 입력하면 크론탭을 생성해주는 편집기 화면이 뜹니다.

 

crontab -e

 

 

만약 편집기가 'vi'여서 작업에 어려움이 있다면 아래와 같이 해서,

nano편집기로 크론탭을 열 수 있습니다.

 

EDITOR=nano crontab -e

 

3. 크론탭의 주기설정

가장 먼저 알아야 할 것이 크론탭에서 어떤 주기로 실행시킬지를 설정하는 것 입니다.

크론탭에서는 5자리를 이용해서 주기를 설정하는데요.

각각의 자리가 무엇을 의미하는지 알고있어야 합니다.

 

* * * * *
분(0~59) 시간(0~23) 일(1~31) 월(1~12) 요일(0~7)

 

'분, 시간, 일, 월, 요일' 의 순서대로 되어있는데요.

도표로 보면 아래와 같습니다.

각 자리에 맞는 값을 넣어주면고, 뒤에 실행할 명령어나 스크립트를 넣어주면 됩니다.

 

*    *    *    *    *  <실행할 명령어 또는 스크립트>
┬    ┬    ┬    ┬    ┬
│    │    │    │    │
│    │    │    │    │
│    │    │    │    │
│    │    │    │    └───── 요일 (0 - 7) (0과 7은 일요일)
│    │    │    └────────── 월 (1 - 12)
│    │    └─────────────── 일 (1 - 31)
│    └──────────────────── 시 (0 - 23)
└───────────────────────── 분 (0 - 59)

 

 

몇 가지 예제를 보도록 하겠습니다.

 

3-1. 매시간 0, 30, 45분에  실행하기

분단위를 설정하는 첫번째 자리에서,

몇 분에 스크립트를 실행시킬지 정할 수 있습니다.

아래에서는 0분, 30분, 45분에 실행시키도록 설정한 명령어인데요.

이렇게, 첫번째 자리에 ','(콤마)로 구분해서 값들을 설정할 수 있습니다.

 

0, 30, 45 * * * * $HOME/script/backup.sh

 

이런 경우가 많지는 않겠지만, 매분마다 실행하려면 어떻게 해줘야 할까요?

아래와 같이 해주면 됩니다.

 

* * * * * $HOME/scripts/backup.sh

 

3-2. 특정 시간에만 실행하기

위에서 분단위 설정을 해 주었는데요.

매일 새벽 2시 30분에 스크립트를 실행시킨다면 아래와 같이 해주면 됩니다.

 

30 2 * * * $HOME/scripts/backup.sh

 

 

 

매일 자정에 실행되게 하려면 다음과 같이 하면 되겠습니다.

 

0 0 * * * $HOME/scripts/backup.sh

 

 

매 30분마다 실행하게 하고 싶은 경우는 아래와 같이 해줄 수 있습니다.

 

*/30 * * * * $HOME/scripts/backup.sh

 

매 시간마다 실행하게 싶다면 아래와 같이 해주면 되겠지요.

 

0 * * * * $HOME/scripts/backup.sh

 

3-3. 매주 마다 실행

매주 특정요일마다 실행시킨다면,

시간과 분 그리고 요일을 지정해주면 됩니다.

 

첫번째자리가 분, 두번째 자리가 시간,

마지막 5번째 자리가 요일인데요.

일요일이 0과 7이고,

월~토요일은 1~6이 됩니다.

 

아래는 특정 시간에 실행되도록 하는 것 인데요.

사용자가 많지 않은 일요일 새벽시간에 하는 정기점검에 적합할 것 같네요.

매주 일요일 오전 1시 59분에 test.sh를 실행하도록 한 것 입니다.

 

59 1 * * 7 $HOME/scripts/test.sh

 

3-4. 주석

크론탭파일에서 스케쥴링을 할 때 주석을 달 수 있는데요.

아래와 같이 '#'을 앞에 붙이면 그 뒤의 내용들은 모두 주석이 됩니다.

 

# 매일 매시간 10분에 backup.sh를 실행
10 * * * * $HOME/scripts/backup.sh

 

4. 크론탭 내용 확인과 삭제

위에서와 같이 각종 스케쥴링을 크론탭 에디터에서 작성한 후,

저장하고 빠져나오면 되는데요.

 

크론탭에 등록된 스케쥴들을 확인하기 위해서는,

아래 명령어를 사용해 주면 됩니다.

 

crontab -l

 

만약 크론탭을 삭제하고 싶다면,

아래 명령을 이용해 주면 됩니다.

 

crontab -r

 

5. 크론탭 파일에 여러 스케쥴링 하기

크론탭 파일에 크론잡을 여러 줄로 작성하면,

각 스케쥴링에 따라서 동작하게 됩니다.

아래는 매일, 매주, 매월 동작하도록 3줄로 크론잡을 작성한 예 입니다.

 

# Daily: 매일 새벽1시 0분에 실행
0 1 * * * $HOME/scripts/backup_script.sh

# Weekly: 매주 일요일 새벽 3시 0분에 실행
0 3 * * 0 $HOME/scripts/weekly_backup_script.sh

# Monthly: 매월 1일 오전 6시 0분에 실행
0 6 1 * * $HOME/scripts/monthly_backup_script.sh

 

여러 개의 스케줄링을 한 파일에 작성할 때는,

가독성을 위해 줄 사이에 빈 줄을 추가하거나 주석을 사용하여 구분할 수도 있습니다.

 

728x90

댓글