본문 바로가기
Develop/Server

[Linux] CRON 과 AT을 이용하여 작업 예약하기

by 코딩의성지 2020. 7. 29.

시스템을 운영하다 보면 특정 시간에 백업을 하거나, 일시적으로 어떤 작업을 돌려야할 때가 있다. 이럴 때 쓰는 게 cron 과 at 이다.

 

cron

금융권 IT 에서 일을 하다보니, 고객이 금융서비스를 사용하지 않는 시간대에 백업 등의 업무를 많이 한다. (사실 실제로는 이런 명령어를 써서 백업을 하진 않는다. 고가(?)의 솔루션을 써서 안전하게 한다...) 이 때, 주기적으로 반복되는 어떠한 작업을 자동으로 실행할 수 있도록 시스템 작업을 예약해 놓는 것을 cron 이라고 한다.

 

cron 과 관련된 데몬(서비스)은 crond 이고 관련 파일은 /etc/crontab이다.

 

/etc/crontab의 형식은 아래와 같다.

분 시 일 월 요일 사용자 실행명령

분은 0~59, 시는 0~23, 일은 1~31, 월은 1~12, 요일은 0~6의 숫자가 올 수 있다.

 

아래 예시를 보면서 이해해 보자.

00 03 * * root cp -r /home /backup

해당 의미는 매일 새벽 3시에 /home 디렉토리 내부를 /backup 디렉토리로 통째로 복사하라는 의미이다.

여기서 *은 매월과 모든 요일을 의미한다.

 

또 하나 알아 둬야할게 cron은 주기적으로 실행할 내용을 디렉터리에 넣어놓고 동작한다. 해당 디렉토리 구조는 아래와 같으니 참고하기 바란다. 해당 디렉토리는 /etc/crontab 파일이 시간별, 일별, 주별, 월별로 호출하는 디렉토리를 보여준다.

 

그래서 우리는 아래와 같은 내용을 입력함으로써, 시간별, 일별, 주별, 월별로 호출하도록 할수 있다. 

 

30 * * * * root run-parts /etc/cron.hourly
30 03 * * * root run-parts /etc/cron.daily
30 03 * * 0 root run-parts /etc/cron.weekly
30 03 1 * * root run-parts /etc/cron/monthly

 

의미는 위에 설명한 것으로 충분히 해석이 가능할 것으로 알고 설명을 생략하도록 하겠다. 하나만 설명하고 넘어가자면 run-parts 명령어는 다음에 나오는 디렉터리 안의 명령을 모두 실행한다는 의미이다. 이 정도만 알면 해석이 가능하리라 본다.

 

cron 실습

상황 : 매월 10일 새벽 5시에 /home 디렉터리와 그 하위 디렉터리를 /backup 디렉터리에 백업하기

 

1) systemctl status crond 명령어로 crond가 동작하는지 확인하

2) gedit 이나 vi로 /etc/crontab 을 열어 , 맨 아래에 '00 05 10 * * root run-parts /etc/cron.monthly' 를 추가하고 ,저장

 

3) /etc/cron.monthly/ 디렉터리에 메시지를 출력하는 스크립트를 만들고, 속성을 실행할 수 있게 바꾼다.

 

 

4) gedit 이나 vi로 아래내용 편집 후 저장

5) 백업용 디렉터리 생성하고, crond 데몬 재시작

이렇게하면 끝.... 이지만 그래도 결과를 확인하긴 해야할 것 같아서 .. ! 강제로 날짜를 바꿔보자.!

그리고 나서 !! 1~2 분 기다려보면 ... ㅎㅎ

 

이렇게 백업 파일이 남게 된다 !

 

at

cron 은 주기적으로 반복되는 작업을 예약하는 것인데, 한번씩 일회성으로 작업을 예약해줘야할 때가 있다. 이때 쓰는게 바로 at이다. 사용법은 아래와 같다.

 

- 예약 : at 시간
  예) at 4:00am tomorrow -> 내일 새벽 4시
       at 10:00pm January 15 -> 1월 15일 오후 10시
       at now +3 hours -> 3시간 뒤
- at> 프롬프트에 예약 명령어 입력 후 Enter 입력
- 완료 시 ctrl + D 

 

at 실습

상황 : 내일 새벽5시에 시스템을 최신 패키지로 업데이트하고 , 완료되면 시스템을 재기동하는 작업 예약

 

위에서 설명 안한것이 있다면 atrm 인데 이건 작업을 삭제하는것이니 참고로 알아두자 !

 

끝.

반응형

댓글