소개
Linux 작업 스케줄링 랩에 오신 것을 환영합니다. 이번 세션에서는 Unix 계열 운영 체제에서 시간 기반 작업 스케줄러인 crontab 유틸리티를 사용하여 Linux 에서 반복적인 작업을 자동화하는 방법을 배우게 됩니다.
작업 스케줄링은 시스템 관리자와 개발자에게 필수적인 기술입니다. 일상적인 작업을 자동화함으로써 효율성을 높이고, 안정성을 보장하며, 수동 개입을 줄일 수 있습니다. crontab 유틸리티를 사용하면 분 단위에서 월 단위까지 지정된 간격으로 명령을 실행하도록 예약할 수 있습니다.
이 랩을 통해 crontab을 사용하여 예약된 작업을 생성, 관리 및 모니터링하는 방법을 배우게 됩니다. 랩이 끝나면 자체 Linux 환경에서 자동화된 작업 스케줄링을 구현하는 기술을 갖추게 될 것입니다.
Crontab 이해 및 첫 번째 예약 작업 생성
Crontab (Cron Table) 은 Linux 에서 사용자가 지정된 시간에 자동으로 작업을 예약하여 실행할 수 있도록 하는 유틸리티입니다. 이러한 예약된 작업을 "cron job"이라고 합니다.
Crontab 구문
cron job 의 기본 구문은 다음과 같습니다.
* * * * * command_to_execute
각 별표 (*) 는 다른 시간 단위를 나타냅니다.
- 분 (0-59)
- 시 (0-23)
- 월의 날짜 (1-31)
- 월 (1-12)
- 요일 (0-6, 0 은 일요일)
예를 들어, 매일 오후 2 시 30 분에 명령을 실행하려면 다음을 사용합니다.
30 14 * * * command_to_execute
첫 번째 Cron Job 생성
매 분마다 현재 날짜와 시간을 기록하는 간단한 cron job 을 만들어 보겠습니다. 이를 통해 cron job 이 어떻게 작동하는지 이해할 수 있습니다.
먼저, 올바른 디렉토리에 있는지 확인합니다.
cd ~/project
이제 cron job 이 날짜와 시간을 기록할 빈 로그 파일을 생성해 보겠습니다.
touch ~/project/date_log.txt
다음으로, 다음 명령을 사용하여 crontab 편집기를 엽니다.
crontab -e
crontab 을 처음 사용하는 경우 편집기를 선택하라는 메시지가 표시될 수 있습니다. 선호하는 옵션을 선택하십시오 (초보자에게는 nano 가 권장됩니다).
편집기에서 파일 끝에 다음 줄을 추가합니다.
* * * * * date >> ~/project/date_log.txt
편집기를 저장하고 종료합니다.
- nano 를 사용하는 경우
Ctrl+O를 눌러 저장한 다음Enter를 눌러 확인하고 마지막으로Ctrl+X를 눌러 종료합니다. - vim 을 사용하는 경우
Esc를 누른 다음:wq를 입력하고Enter를 누릅니다.
이 cron job 은 매 분마다 현재 날짜와 시간을 date_log.txt 파일에 추가합니다. 최소 1 분 동안 기다린 다음 cron job 이 작동하는지 확인합니다.
cat ~/project/date_log.txt
다음과 유사한 출력을 볼 수 있습니다.
Tue Feb 15 14:32:01 UTC 2023
더 오래 기다린 후 명령을 다시 실행하면 약 1 분 간격으로 타임스탬프가 있는 여러 항목이 표시되어 cron job 이 올바르게 실행되고 있음을 확인할 수 있습니다.
Cron Job 관리 및 수정
이제 첫 번째 cron job 을 만들었으므로 예약된 작업을 보고, 수정하고, 관리하는 방법을 알아보겠습니다.
현재 Cron Job 보기
현재 cron job 을 보려면 다음 명령을 사용합니다.
crontab -l
이 명령은 현재 사용자에 대해 예약된 모든 cron job 을 표시합니다. 이전 단계에서 생성한 작업을 볼 수 있습니다.
* * * * * date >> ~/project/date_log.txt
Cron Job 스케줄링 패턴 이해
작업을 수정하기 전에 몇 가지 일반적인 스케줄링 패턴을 이해해 보겠습니다.
* * * * *- 매 분마다 실행*/5 * * * *- 5 분마다 실행0 * * * *- 매 시간 시작 시 실행0 0 * * *- 매일 자정에 실행0 0 * * 0- 매주 일요일 자정에 실행
Cron Job 수정
기존 cron job 을 매 분마다 실행하는 대신 5 분마다 실행하도록 수정해 보겠습니다. 이렇게 하려면 crontab 편집기를 엽니다.
crontab -e
이전 단계에서 추가한 줄을 찾습니다.
* * * * * date >> ~/project/date_log.txt
다음으로 변경합니다.
*/5 * * * * date >> ~/project/date_log.txt
첫 번째 위치의 */5는 "5 분마다"를 의미합니다. 이전과 동일한 방법 (Ctrl+O, Enter, Ctrl+X for nano) 을 사용하여 편집기를 저장하고 종료합니다.
변경 사항을 확인하려면 crontab 을 다시 봅니다.
crontab -l
업데이트된 cron job 을 볼 수 있습니다. 출력은 다음과 같습니다.
*/5 * * * * date >> ~/project/date_log.txt
5 분 동안 기다린 후 로그 파일을 다시 확인하면 다음과 같습니다.
cat ~/project/date_log.txt
이제 새로운 항목이 매 분마다 추가되는 대신 5 분마다 추가되는 것을 확인할 수 있습니다.
작업 빈도 수정의 이점
적절한 간격으로 작업을 실행하면 시스템 리소스를 최적화하는 데 도움이 됩니다. 매우 빈번한 작업 (예: 매 분) 은 불필요한 시스템 부하를 유발할 수 있으며, 덜 빈번한 스케줄 (예: 5 분마다) 은 모니터링 작업에 대한 적시성과 효율성 간의 더 나은 균형을 제공하는 경우가 많습니다.
더욱 발전된 Cron Job 생성
이제 기본 사항을 이해했으므로 시스템 정보를 기록하는 더 발전된 cron job 을 만들어 보겠습니다.
시스템 정보 로깅 작업 생성
매 시간마다 시스템의 메모리 사용량에 대한 정보를 기록하는 cron job 을 만들어 보겠습니다. 이러한 유형의 모니터링은 시간이 지남에 따라 시스템 성능을 추적하는 데 유용할 수 있습니다.
먼저, 메모리 정보를 수집할 쉘 스크립트를 생성해 보겠습니다.
nano ~/project/memory_check.sh
nano 편집기에서 다음 내용을 추가합니다.
#!/bin/bash
echo "Memory check at $(date)" >> ~/project/memory_log.txt
free -m >> ~/project/memory_log.txt
echo "--------------------" >> ~/project/memory_log.txt
이 스크립트는 다음을 수행합니다.
- 로그에 타임스탬프를 추가합니다.
free -m명령을 실행하여 메모리 사용량을 메가바이트 단위로 표시합니다.- 가독성을 위해 구분선을 추가합니다.
편집기를 저장하고 종료합니다 ( Ctrl+O, Enter, 다음 Ctrl+X를 누릅니다).
이제 스크립트를 실행 가능하게 만듭니다.
chmod +x ~/project/memory_check.sh
스크립트가 올바르게 작동하는지 확인하기 위해 테스트할 수 있습니다.
~/project/memory_check.sh
출력 파일을 확인합니다.
cat ~/project/memory_log.txt
타임스탬프, 메모리 사용량 정보 및 구분선이 포함된 출력을 볼 수 있습니다.
이제 crontab 을 사용하여 이 스크립트를 매시간 실행하도록 예약해 보겠습니다.
crontab -e
다음 줄을 추가합니다 (기존 cron job 을 유지하면서).
0 * * * * ~/project/memory_check.sh
이렇게 하면 매 시간 시작 시 메모리 확인 스크립트가 실행됩니다. 편집기를 저장하고 종료합니다.
새 cron job 이 추가되었는지 확인하려면:
crontab -l
두 cron job 을 모두 볼 수 있습니다.
*/5 * * * * date >> ~/project/date_log.txt
0 * * * * ~/project/memory_check.sh
특수 시간 문자열 사용
Cron 은 일반적인 스케줄링 패턴에 대한 몇 가지 특수 시간 문자열도 지원합니다.
@hourly-0 * * * *와 동일@daily-0 0 * * *와 동일@weekly-0 0 * * 0과 동일@monthly-0 0 1 * *과 동일@reboot- 시스템 시작 시 실행
이러한 특수 문자열을 사용하여 매일 실행되는 작업을 추가해 보겠습니다.
crontab -e
다음 줄을 추가합니다.
@daily echo "Daily check on $(date)" >> ~/project/daily_check.txt
편집기를 저장하고 종료합니다. 이렇게 하면 매일 자정에 daily_check.txt 파일에 새 항목이 생성됩니다.
새 cron job 이 추가되었는지 확인하려면:
crontab -l
이제 세 개의 cron job 을 모두 볼 수 있습니다.
*/5 * * * * date >> ~/project/date_log.txt
0 * * * * ~/project/memory_check.sh
@daily echo "Daily check on $(date)" >> ~/project/daily_check.txt
Cron Job 출력 관리
기본적으로 cron 은 작업의 모든 출력을 사용자의 이메일로 보냅니다. 출력을 완전히 삭제하려면 /dev/null로 리디렉션할 수 있습니다.
*/10 * * * * ~/project/some_script.sh > /dev/null 2>&1
이것은 보관할 필요가 없는 출력을 생성하는 스크립트에 대한 일반적인 관행입니다.
요약
Linux 작업 스케줄링 랩을 완료하신 것을 축하드립니다. 이제 crontab 유틸리티를 사용하여 Linux 에서 작업을 자동화하는 방법을 배웠습니다.
이 랩을 통해 다음을 수행했습니다.
- 정기적인 간격으로 날짜와 시간을 기록하는 기본적인 cron job 생성
- crontab 구문과 시간 필드 (분, 시, 일, 월, 요일) 의 의미 학습
- 기존 cron job 을 수정하여 실행 빈도 변경
- 시스템 모니터링을 위한 쉘 스크립트 생성 및 매시간 실행하도록 예약
- 일반적인 스케줄링 패턴에
@daily와 같은 특수 시간 문자열 사용 - cron job 의 출력을 관리하는 방법 학습
이러한 기술은 모든 Linux 사용자 또는 시스템 관리자에게 필수적입니다. crontab 을 사용하면 다음과 같은 일상적인 작업을 자동화할 수 있습니다.
- 시스템 유지 관리 및 정리
- 데이터 백업 및 동기화
- 로그 로테이션 및 관리
- 정기적인 상태 확인 및 모니터링
- 예약된 보고
효과적인 작업 스케줄링을 구현함으로써 시스템 안정성을 높이고, 수동 개입을 줄이며, 워크플로우를 최적화할 수 있습니다. 항상 cron job 을 철저히 테스트하고 예약된 작업이 시스템 성능에 미치는 영향을 고려하십시오.
자동화 기술을 더욱 향상시키기 위해 crontab 및 기타 Linux 스케줄링 도구의 기능을 계속 탐색하십시오.



