CentOS에서 crontab을 사용한 주기적 작업 스케줄링

개요

CentOS와 같은 리눅스 환경에서는 반복적으로 수행해야 하는 시스템 작업을 자동화할 필요가 자주 발생합니다. 예를 들어, 지속 통합(CI) 파이프라인에서 생성된 불필요한 Docker 이미지를 정기적으로 제거하는 작업이 있을 수 있습니다. 이러한 목적을 달성하기 위해 crontab을 활용하면 간편하고 안정적인 스케줄 기반 실행이 가능합니다.

crontab의 작동 원리

crond는 백그라운드에서 실행되는 데몬으로, 주기적으로 등록된 작업(cron job)을 확인하고 조건에 맞을 경우 명령어를 실행합니다. 사용자는 crontab 명령어를 통해 이 데몬에게 어떤 스크립트나 명령을 언제 실행할지 지정할 수 있습니다. 각 사용자는 독립적인 cron 설정을 가질 수 있으며, 해당 설정은 시스템 내부에 저장됩니다.

주요 명령어

crontab -e    # 현재 사용자의 작업 목록 편집
crontab -l    # 등록된 작업 보기
crontab -r    # 모든 작업 삭제 (주의 필요)
crontab -i    # 삭제 전 확인 요청 (--remove 옵션과 함께 사용)
crontab -u username -e  # 특정 사용자의 작업 편집

작업 표현 형식

cron 작업은 다음과 같은 6개 필드로 구성됩니다:

* * * * * command-to-execute
| | | | |
| | | | +----- 요일 (0-6, 일요일=0 또는 7)
| | | +------- 월 (1-12)
| | +--------- 일 (1-31)
| +----------- 시간 (0-23)
+------------- 분 (0-59)
  • *: 해당 필드에서 가능한 모든 값을 의미 (예: 매분)
  • /: 간격을 나타냄 (예: */10 → 매 10분마다)
  • -: 범위 지정 (예: 9-17 → 오전 9시부터 오후 5시까지)
  • ,: 복수 개의 개별 값 나열 (예: 1,3,5 → 월, 수, 금)

실제 예제: 10분마다 로그 출력

다음은 10분 간격으로 메시지를 출력하는 작업을 등록하는 과정입니다.

  1. 스크립트 파일 생성 및 작성:
    vim /home/scripts/cleanup_check.sh
    #!/bin/bash
    echo "$(date): 주기적 점검 실행됨" >> /var/log/cleanup.log

    스크립트에 실행 권한 부여:

    chmod +x /home/scripts/cleanup_check.sh
  2. cron 설정 추가:
    crontab -e

    아래 내용 입력:

    */10 * * * * /home/scripts/cleanup_check.sh
  3. 등록 여부 확인:
    crontab -l

    출력 예:

    */10 * * * * /home/scripts/cleanup_check.sh
  4. 로그 파일 존재 여부 및 기록 확인:
    tail -f /var/log/cleanup.log

모범 사례

  • 실행 파일은 항상 절대 경로를 사용할 것
  • 환경 변수가 필요한 경우, 스크립트 내에서 직접 설정하거나 cron 항목에 포함
  • 표준 출력 및 에러는 로그 파일로 리디렉션하여 문제 추적 용이하게 유지
  • 중요 작업은 테스트 환경에서 검증 후 운영에 적용

문제 해결 팁

만약 작업이 의도대로 실행되지 않는다면 다음을 점검하세요:

  • crond 서비스가 실행 중인지: systemctl status crond
  • 스크립트에 실행 권한이 있는지
  • PATH 환경 변수가 cron 환경에서 올바르게 설정되었는지
  • 로그 파일 경로에 쓰기 권한이 있는지

태그: crontab CentOS 리눅스 시스템 관리 자동화 스크립트 주기적 작업

6월 20일 05:23에 게시됨