CS/Linux

[Linux] CRON과 AT

kyoulho 2024. 9. 22. 17:03

CRON


CRON은 리눅스에서 주기적으로 명령어나 스크립트를 실행할 수 있게 해주는 스케줄링 도구이다. 주로 정기적인 시스템 유지보수 작업이나 백업 작업 등에 사용된다.

crond

crond는 CRON 작업을 관리하고 실행하는 백그라운드 데몬이다. 시스템이 부팅될 때 자동으로 시작되며, 사용자와 시스템의 crontab 파일을 주기적으로 확인하여 예약된 작업을 실행한다.

/etc/crontab

/etc/crontab는 시스템 전체에 적용되는 crontab 파일로, 사용자별 crontab과는 다르게 사용자 필드가 포함되어 있다. 이 파일은 시스템 관리자가 주기적인 시스템 작업을 설정할 때 주로 사용된다.

 

기타 시스템 crontab 파일:

  • /etc/cron.d/: 추가적인 crontab 파일을 저장하는 디렉토리로, 패키지 설치 시 개별 작업을 추가할 때 사용된다.
  • /etc/cron.hourly/: 매 시간 실행되는 스크립트를 저장하는 디렉토리.
  • /etc/cron.daily/: 매일 실행되는 스크립트를 저장하는 디렉토리.
  • /etc/cron.weekly/: 매주 실행되는 스크립트를 저장하는 디렉토리.
  • /etc/cron.monthly/: 매월 실행되는 스크립트를 저장하는 디렉토리.

이러한 디렉토리에 스크립트를 추가하면, 지정된 주기에 따라 자동으로 실행된다.

CRON의 기본 구조

CRON 작업은 crontab 파일에 정의된다. crontab 파일의 각 라인은 특정 시간에 실행될 작업을 지정한다. 기본적인 CRON 표현식은 다음과 같다:

* * * * * 명령어

각 별표(*)는 다음과 같은 순서로 시간을 나타낸다:

  1. 분 (0-59)
  2. 시간 (0-23)
  3. 일 (1-31)
  4. 월 (1-12)
  5. 요일 (0-7) (0과 7은 일요일)

crontab 명령어

crontab 편집하기
현재 사용자에 대한 crontab 파일을 편집한다.

crontab -e

 

crontab 목록 보기
현재 사용자의 crontab 목록을 출력한다.

crontab -l

 

crontab 삭제하기
현재 사용자의 crontab 파일을 삭제한다.

crontab -r

CRON 표현식 예제

매 분마다 명령어 실행하기
매 분마다 script.sh를 실행한다.

* * * * * /path/to/script.sh

 

매일 오전 2시 30분에 명령어 실행하기
매일 오전 2시 30분에 backup.sh를 실행한다.

30 2 * * * /path/to/backup.sh

 

매주 월요일 오전 5시에 명령어 실행하기
매주 월요일 오전 5시에 weekly_task.sh를 실행한다.

0 5 * * 1 /path/to/weekly_task.sh

 

매월 1일 자정에 명령어 실행하기
매월 1일 자정에 monthly_task.sh를 실행한다.

0 0 1 * * /path/to/monthly_task.sh

 

평일 오전 9시부터 오후 5시까지 매 시간마다 명령어 실행하기
평일(월~금) 오전 9시부터 오후 5시까지 매 시간 정각에 hourly_task.sh를 실행한다.

0 9-17 * * 1-5 /path/to/hourly_task.sh

특수 문자와 예약어

특수 문자:

  • *: 모든 값
  • ,: 여러 값 지정 (예: 1,15,30)
  • -: 범위 지정 (예: 1-5)
  • /: 간격 지정 (예: */5는 5분마다)

예약어:

  • @reboot: 시스템 재부팅 시 실행
  • @yearly 또는 @annually: 매년 1월 1일 자정에 실행
  • @monthly: 매월 1일 자정에 실행
  • @weekly: 매주 일요일 자정에 실행
  • @daily 또는 @midnight: 매일 자정에 실행
  • @hourly: 매 시간 정각에 실행

예제: 시스템 재부팅 시마다 스크립트 실행

@reboot /path/to/startup.sh

CRON 환경 설정

CRON 작업은 제한된 환경에서 실행되므로, 필요한 환경 변수를 명시적으로 설정하는 것이 좋다. 예를 들어, PATH 변수를 설정하려면 crontab 파일 상단에 다음과 같이 추가할 수 있다:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

CRON 작업의 로그 확인하기

CRON 작업의 출력은 기본적으로 메일로 전송되거나 /var/log/cron 또는 /var/log/syslog에 기록될 수 있다. 로그 파일을 확인하여 CRON 작업의 성공 여부를 확인할 수 있다.

tail -f /var/log/cron

CRON 작업 디버깅하기

CRON 작업이 예상대로 실행되지 않을 경우, 스크립트에 절대 경로를 사용하고 필요한 환경 변수를 설정했는지 확인한다. 또한, 스크립트의 실행 권한을 확인한다.

 

AT


AT 명령어는 특정 시점에 단일 작업을 실행할 때 사용된다. CRON이 주기적인 작업에 적합한 반면, AT는 일회성 작업에 적합하다.

AT의 기본 사용법

AT 작업 예약하기

예를 들어, 특정 시간에 명령어를 실행하려면 다음과 같이 입력한다. 그런 다음 실행할 명령어를 입력하고 Ctrl+D를 눌러 입력을 종료한다.

# at [시간] [날짜]

at 14:00 2024-10-01
at>


 

AT 작업 목록 보기
현재 예약된 AT 작업 목록을 출력한다.

atq
또는
at -l

 

AT 작업 삭제하기
특정 AT 작업을 삭제한다.

atrm [작업 번호]

AT 시간 형식

절대 시간:

  • HH:MM YYYY-MM-DD
  • 예: 14:00 2024-10-01

상대 시간:

  • now + N minutes
  • now + N hours
  • now + N days
  • 예: now + 1 hour, now + 30 minutes

특수 키워드:

  • midnight: 자정
  • noon: 정오
  • teatime: 오후 4시

내일 오전 9시에 명령어 실행하기

echo "/path/to/script.sh" | at 09:00 tomorrow

 

특정 시간에 스크립트 실행하기

at 18:30 2024-10-05

다음과 같이 명령어를 입력하고 Ctrl+D를 눌러 예약을 완료한다.

/path/to/cleanup.sh

 

5분 후에 명령어 실행하기

echo "echo 'Hello, World!'" | at now + 5 minutes

 

현재 시각으로부터 2일 후 자정에 명령어 실행하기

echo "/path/to/backup.sh" | at midnight + 2 days
728x90

'CS > Linux' 카테고리의 다른 글

[Linux] 파이프, 프로세스, 서비스  (1) 2024.09.28
[Linux] 주요 네트워크 명령어 및 설정 파일  (0) 2024.09.27
[Linux] 파일 위치 검색  (1) 2024.09.22
[Linux] 파일의 압축과 묶기  (1) 2024.09.22
[Linux] 패키지 관리자  (1) 2024.09.22