crontab

linux

목록 보기
5/5

crontab이란?

crontab은 리눅스에서 특정 시간에 작업을 예약할 수 있는 도구입니다.

반복적으로 실행해야 하는 작업(백업, 로그 관리, 보고서 생성 등)을 자동화할 때 사용합니다.

컴퓨터가 사람이 입력하지 않아도 스스로 명령어를 실행하는 자동 스케줄러라고 보면 됩니다.


crontab 작동 방식

crontab은 시스템의 크론 데몬(cron daemon)이라는 프로그램이 정해진 시간에 작업을 실행합니다.

우리는 crontab 명령어를 사용해서 작업 일정을 작성하고 수정합니다.


crontab 명령어

1. crontab 편집

crontab -e
  • 현재 사용자의 예약 작업 목록을 편집합니다.
  • 첫 실행 시 기본 편집기(vi, nano 등)를 선택해야 합니다.

2. crontab 목록 확인

crontab -l
  • 현재 사용자가 설정한 crontab 작업 목록을 확인합니다.

3. crontab 삭제

crontab -r
  • 현재 사용자의 모든 crontab 작업을 삭제합니다.

4. 특정 사용자 crontab 편집

sudo crontab -u username -e
  • 특정 사용자의 crontab 작업을 편집합니다(관리자 권한 필요).

crontab 시간 설정 형식

기본 구조

<> <시간> <> <> <요일> <실행할 명령어>
  • : 0~59 (몇 분에 실행할지)
  • 시간: 0~23 (몇 시에 실행할지)
  • : 1~31 (몇 일에 실행할지)
  • : 1~12 (몇 월에 실행할지)
  • 요일: 0~6 (0=일요일, 6=토요일)
  • 실행할 명령어: 실행할 프로그램, 명령어, 스크립트 등.

특별 기호

  • `: "모두"를 의미. (ex. * * * *` → 매분 실행)
  • ,: 여러 값 지정. (ex. 1,15 → 1분, 15분에 실행)
  • `: 범위 지정. (ex. 1-5` → 1분부터 5분까지 실행)
  • /: 주기 지정. (ex. /5 → 5분마다 실행)

crontab 예시

1. 매일 00:30에 실행

30 0 * * * /home/user/backup.sh
  • 매일 자정 30분에 /home/user/backup.sh를 실행.

2. 매주 월요일 오전 9시에 실행

0 9 * * 1 /home/user/weekly_report.sh
  • 매주 월요일 9시에 /home/user/weekly_report.sh를 실행.

3. 매달 1일 자정에 실행

0 0 1 * * /home/user/monthly_cleanup.sh
  • 매달 1일 자정에 /home/user/monthly_cleanup.sh를 실행.

4. 매시간 정각에 실행

0 * * * * /home/user/hourly_task.sh
  • 매시간 정각에 /home/user/hourly_task.sh를 실행.

5. 매분 실행

* * * * * echo "Hello, world!"
  • 매분마다 "Hello, world!"를 출력.

6. 매월 15일과 30일 오전 10시에 실행

0 10 15,30 * * /home/user/special_task.sh

7. 매일 오전 8시부터 오후 6시까지 30분 간격으로 실행

*/30 8-18 * * * /home/user/interval_task.sh

crontab 활용 팁

1. 환경 변수 설정

crontab에서 실행되는 작업은 터미널과 환경 변수가 다를 수 있습니다.

필요한 경로나 환경 변수를 스크립트에 명시해 주어야 합니다.

예:

#!/bin/bash
export PATH=/usr/local/bin:/usr/bin:/bin
my_command

2. 로그 기록

crontab 작업 결과를 로그 파일로 남기면 문제를 추적하기 쉬워집니다.

예:

30 0 * * * /home/user/task.sh >> /home/user/task.log 2>&1
  • >>: 출력 결과를 로그 파일에 추가.
  • 2>&1: 오류 메시지도 로그 파일에 포함.

3. 테스트용 작업 설정

작업이 잘 실행되는지 확인하려면 테스트 작업을 설정해 볼 수 있습니다.

예: 매분 실행

* * * * * echo "Crontab Test" >> /home/user/test.log

4. 특정 시간대 실행

서버가 다른 시간대를 사용한다면, 작업 전에 시간대 설정을 확인하세요.


crontab 디버깅

  1. crontab 실행 확인
    • crontab 작업이 실행되었는지 확인하려면 시스템 로그를 확인하세요:(CentOS/Red Hat 계열에서는 /var/log/cron)
      tail -f /var/log/syslog
      
  2. 작업 실행 여부 확인
    • 스크립트가 제대로 작동하지 않을 경우, 수동으로 실행해 보세요:
      /home/user/task.sh
      
  3. 실행 권한 확인
    • 실행할 스크립트는 실행 권한이 있어야 합니다:
      chmod +x /home/user/task.sh
      

crontab으로 자동화한 예제

목표: 매일 00:30에 전날 로그 파일 복사

  1. 스크립트 작성

    • 파일: /home/user/copy_yesterday_logs.sh
    #!/bin/bash
    YESTERDAY=$(date -d "yesterday" +"%Y-%m-%d")
    SOURCE_LOG="/var/log/nethru/access.log.${YESTERDAY}"
    DEST_SERVER="user@156"
    DEST_PATH="/backup/nethru/"
    scp ${SOURCE_LOG} ${DEST_SERVER}:${DEST_PATH}
    
  2. crontab에 등록

    crontab -e
    

    추가 내용:

    30 0 * * * /home/user/copy_yesterday_logs.sh
    

crontab 요약

  • crontab은 리눅스에서 예약 작업을 설정하는 데 필수적인 도구야.
  • 정해진 시간과 주기로 작업을 자동 실행할 수 있어 반복적인 작업을 편리하게 처리해.
  • 기본 형식만 익히면, 백업, 정리, 보고서 생성 등 다양한 작업을 쉽게 자동화할 수 있어.

자동화를 통해 시간을 절약하고, 더 효율적으로 시스템을 관리해 보자! 😊

0개의 댓글