본문 바로가기
Linux/Chrontab

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

by Developer88 2024. 4. 10.
반응형

특정한 시간에,

스크립트로 작성한 작업들을 실행시키려 할 때,

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

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

 

1. Crontab(크론탭)

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

반복적인 작업을 스케줄링하기 위한 유틸리티입니다. 

특정 시간, 날짜 간격으로,

스크립트나 프로그램을 실행하도록 스케줄을 설정해,

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

서버를 운영하는 작업자에게 너무나 중요한 유틸리티이지요.

 

2. 실행할 스크립트 준비하기

2-1. 실행 스크립트 준비

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

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

(간단한 명령어를 등록해 사용할 수도 있지만, 스크립트 사용법도 알아야 하니까요.)

일반적으로 크론탭(crontab)은,

/bin/sh를 사용하여 스크립트를 실행합니다.

 

스크립트를 아래 파일명으로 저장해, 작업을 등록해 보겠습니다.

  • ~/script/backup.sh
#!/bin/bash

current_date=$(date)

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

 

참고로 위에서 사용된 '>>' 기호는 리다이렉션 연산자로, 

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

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

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

 

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

작성해 둔 스크립트에 실행권한이 없어서,

실행되지 않을 수 있습니다.

실행권한이 있는지,

아래 명령어를 통해서 확인해 봅니다.

 

ls -l backup.sh

 

실행을 하였는데 아래와 같이 나왔다면, 실행권한이 없다는 뜻입니다.

  • -rw-r--r--

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

위에서는 실행권한을 의미하는 'x'가 빠져있지요.

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

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

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

 

chmod +x backup.sh

 

 

2. Crontab(크론탭) 실행해 작업 등록하기

2-1. -e 옵션으로 실행하기

크론탭을 실행해 작업을 등록해 볼까요?

아래 명령어를 입력하면,

크론탭을 생성해주는 편집기 화면이 뜹니다.

 

crontab -e

 

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

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

 

EDITOR=nano crontab -e

 

3-2. /etc/crontab 

/etc/crontab 파일을 수정해서 설정할 수도 있는데요.

대신 이럴 때는, 

명령어 중간에 유저명을 적어주어야 합니다.

 

3. 크론탭 표현식

크론탭 화면에 작업을 등록하기 전에 알아둘 것이 있습니다.

어떤 주기로 실행시킬지를 설정하는 표현식인데요.

 

아래와 같이,

분, 시간, 일, 월, 요일 순의 5자리로 나타냅니다.

'분 -> 시간 -> 일 ->월' 여기까지 거꾸로 올라가서 주기를 설정하고,

마지막에 요일에 대한 주기를 설정한다고 외워두면 좋습니다.

 

.---------------- 분 (0 - 59)
|  .------------- 시간 (0 - 23)
|  |  .---------- 일 (1 - 31)
|  |  |  .------- 월 (1 - 12) 또는 jan,feb,mar,apr ...
|  |  |  |  .---- 요일 (0 - 6) (일요일=0 또는 7) 또는 sun,mon,tue,wed,thu,fri,sat (이름들)
|  |  |  |  |
*  *  *  *  * <유저이름> <명령어>

 

 

 

표로 다시 정리하면 아래와 같습니다.

설정하고자 하는 주기를 나타내는 자리에 값을 넣어주고,

뒤에 실행할 명령어나 스크립트를 넣어주면 됩니다.

 

참고로 위에서 설명한 것처럼,

중간의 '<유저명>'은 'crontab -e'로 편집기를 열어서 작성한 경우는, 넣을 필요가 없습니다.

 

* * * * *
분(0~59) 시간(0~23) 일(1~31) 월(1~12) 요일(0~6: 일요일이 0)
sun,mon,tue,
wed, thu,fri,sat

 

 

몇 가지 예제를 보며 익혀볼까요?

 

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

 

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

가독성을 위해 줄 사이에 빈 줄을 추가하거나,

주석을 사용하면 됩니다.

주석은 위에서와 같이, '#'을 앞에 넣어주면 됩니다.

 

이상으로 Linux 크론탭으로 작업을 스케쥴링 하는 방법에 대해 정리해 보았습니다.

728x90