Linux에서 Cron 작업을 계획하고 실행하기
Schedule Tasks with cron in Linux
일정 시간 간격으로 반복해서 수행해야 하는 의무적인 작업들, 예를 들어 데이터 백업, 주기적인 시스템 업데이트, 로그 분석 및 정리, 이메일 전송 등이 있습니다. 이와 같은 작업들을 수동으로 관리하려면 복잡하고 시간이 많이 소요되며, 또한 비효율적일 수 있습니다.
이런 상황에서 Linux Cron과 Crontab은 작업이 자동으로 그리고 반복적으로 실행되도록 설정하는 데 있어 필수적인 도구입니다.
Understanding Cron and Crontab in Linux
Cron은 Unix와 Unix 계열 시스템(Linux 포함)에서 사용하는 작업 스케줄러입니다. 이름인 'Cron'은 그리스어로 시간을 뜻하는 'Chronos'에서 유래되었습니다. Cron은 시스템이 계속 실행중이라면 설정된 시간에 정기적인 작업을 수행하도록 설계되었습니다.
crontab
은 'cron table'의 준말로, 이는 Cron 작업 스케줄러가 사용하는 설정 파일입니다. 이 설정 파일은 각 사용자에게 제공되며, 각기 다른 스케줄링 필요에 따라 개별적으로 구성할 수 있습니다.
crontab [option]
-l
: 현재 사용자의 크론탭 목록을 출력합니다.-e
: 기본 텍스트 편집기에서 현재 사용자의 크론탭을 편집합니다.-r
: 현재 사용자의 크론탭을 삭제합니다.
crontab
파일은 라인별로 하나의 작업을 나타내며, 하나의 라인은 두 부분으로 나눌 수 있습니다. 첫 번째 부분은 실행 시간을 설정하는 부분으로 다섯 개의 필드로 이루어져 있으며, 각각 분 · 시 · 일 · 월 · 요일을 지정합니다. 두 번째 부분은 실행할 명령어를 입력하는 필드입니다. 이들 필드는 공백 문자로 구분됩니다.
* * * * * command to be executed
- - - - -
| | | | |
| | | | +----- day of week (0 - 6) (Sunday=0)
| | | +------- month (1 - 12)
| | +--------- day of month (1 - 31)
| +----------- hour (0 - 23)
+------------- min (0 - 59)
*
(asterisk) 기호는 '모든'을 의미합니다.-
(hyphen)을 숫자 사이에 사용하면 그 숫자들 사이의 범위를 나타냅니다.- 시간 필드 표현값
- 분: 0 ~ 59
- 시: 0 ~ 23
- 일: 1 ~ 31
- 월: 1 ~ 12
- 요일: 0 ~ 6 (0: 일요일)
시간 조합은 정확히 이해하고 사용해야 합니다. 또한, 크론탭에서 실행되는 명령은 기본적으로 사용자의 홈 디렉토리에서 실행되며 PATH
는 기본값으로 설정되므로, 전체 경로를 사용하여 스크립트나 프로그램을 지정해야 합니다.
# 매분 스크립트 실행
* * * * * /path/to/script.sh
# 매일 오전 5시에 스크립트 실행
0 5 * * * /path/to/script.sh
# 매월 1일 자정 스크립트 실행
0 0 1 * * /path/to/script.sh
# 매일 매시간 30분에 작업 실행
30 * * * * /path/to/script.sh
# 매주 월요일 오전 2시에 작업을 실행
0 2 * * 1 /path/to/script.sh
# 오전 3시부터 오전 6시까지 매시간에 작업 실행
0 3-6 * * * /path/to/script.sh
# 오전 5시와 오후 5시에 매일 작업 실행
0 5,17 * * * /path/to/script.sh
crontab
에서 스케줄링 시간 설정시 숫자 대신 식별자를 사용할 수도 있습니다.
@reboot
: 부팅 시 한 번 실행@yearly
,@annually
: 매년 한 번 실행@monthly
: 매월 한 번 실행@weekly
: 매주 한 번 실행@daily
,@midnight
: 매일 한 번 실행@hourly
: 매시간 실행
# 시스템이 부팅 될 때 스크립트 실행
@reboot /path/to/script.sh
# 매년 1월 1일에 스크립트 실행
@yearly /path/to/script.sh
# 매월 1일 스크립트를 실행
@monthly /path/to/script.sh
# 매주 일요일 스크립트 실행
@weekly /path/to/script.sh
# 매일 자정 스크립트 실행
@daily /path/to/script.sh
# 매시간 스크립트 실행
@hourly /path/to/script.sh
Steps to Register a Cron Job in Linux
Linux에서 Cron Job을 등록하는 과정은 다음과 같습니다.
먼저, Crontab 파일을 열어야 합니다. 이를 위해 터미널에서 crontab -e
명령어를 입력합니다. 이 명령어는 기본 텍스트 편집기(Vi, Vim, Nano 등)를 사용하여 현재 사용자의 Crontab 파일을 엽니다.
$ crontab -e
텍스트 편집기가 열리면, 새로운 줄에 새로운 Cron 작업을 추가합니다. 각 작업은 한 줄에 하나씩 위치하며, 표준 Crontab 형식을 따라야 합니다.
# crontab
* * * * * command
원하는 작업과 그 작업이 실행될 시간을 지정한 후에는, 변경사항을 저장하고 편집기를 닫습니다. 이렇게 하면 생성한 cron 작업이 등록되어 시스템이 지정된 시간에 해당 작업을 실행하게 됩니다.
만약 현재 등록된 cron 작업들을 확인하고 싶다면, 터미널에서 crontab -l
명령어를 사용하면 됩니다. 이 명령어를 실행하면 현재 사용자가 등록한 모든 cron 작업들을 보여줍니다.
$ crontab -l
* * * * * /usr/bin/echo 'Hello, World!' >> /home/user/hello.txt
30 2 * * 1 /usr/local/bin/weekly_backup.sh
0 0 1 * * /usr/local/bin/monthly_cleanup.sh
만약 cron 작업을 삭제하고 싶다면, crontab -r
명령어를 사용하여 모든 작업을 삭제할 수 있습니다. 특정 작업만을 삭제하려면, crontab -e
명령어를 사용하여 편집 모드로 들어가 해당 작업을 제거하면 됩니다.
$ crontab -r
crontab -r
명령어는 사용자의 crontab
파일을 즉시 삭제하므로 일반적으로 아무런 출력값이 없습니다. 또, 경고 메시지 없이 모든 cron 작업을 즉시 삭제하므로, 이를 실행하기 전에 반드시 crontab -l
명령어를 사용해 현재 설정된 작업을 확인하고 백업하는 것이 좋습니다.
- Linux
- Shell