본문 바로가기

programming/OS (Linux, Windows)

[Linux] crontab 을 이용한 자동 재부팅, 배치 작업 등록하기

이번 의뢰에서 리눅스의 자동 재부팅을 요청받았다.

리눅스에서 배치 작업을 등록하는 방법은 무엇일까?

 


 - 리눅스에서 자동적으로 쉘 스크립트나 프로그램 명령을 등록하는데 가장 자주 사용되는 것이 crontab이다.

 

참고 링크를 확인해 보면, 쉘 스크립트 + crontab을 활용하는 것을 알 수 있다.

 

crontab 의 명령 옵션

상기의 내용은 crontab의 명령 옵션을 표기한다.

수정, 조회, 삭제가 기본이고 추가로 몇 가지 옵션이 더 있지만, 일반적으로는 수정하고 조회 정도면 충분하다.

 

 

1. 작업 리스트 조회

 - 먼저 내가 추가하려는 배치가 있는지 확인해야 한다. 원하는 작업이 이미 존재한다면, 이중작업이 되거나 프로그램 오류의 원인이 될 수 있다.

 

  1) 명령 사용방법

crontab [-u user] -l

crontab -l 옵션을 통한 출력

우선 -u 옵션은 접근 가능한 OS 사용자가 가진 crontab 내용에 대해서도 확인할 수 있도록 제공한다.

예를 들어 위 이미지의 로그인은 root 로서 전체 관리권한(admin)이 있다.

따라서 자신의 하위 권한자가 가진 crontab 조회는 가능하지만, 조회가 불가능하도록 처리된 계정은 조회를 할 수가 없다. 

 

그러나 -u는 옵션으로서 자기 자신의 crontab을 확인할 때는 사용하지 않아도 좋다.

다시 말해, 

crontab -u 로그인-계정 -l

crontab -l

위 두 줄은 그 동작이 같다.

 

  2) 배치 시간 설정

 

위 조회된 내용을 보면 약간 생소한 부분이 확인될 것이다.

 

0 * * * *

55 00 * * * 

 

같은 내용들이다.

앞에서부터 

[분] [시] [일] [월] [요일]

이다.

 

0 * * * * -> 매 0분마다 실행 (시간마다 배치)

55 00 * * * -> 매 0시 55분마다 실행 (일간 배치)

 

* 만 아니라 다양한 기호가 사용되는데, 대표적으로는 (,)와 (-), (/)이다.

기호 내용 예시
* 모든 10 * * * * (모든 10분마다)
, 또는 0 2,3 * * * (모든 2시 또는 3시에)
- 범위 지정 50-55 13 * * * (모든 13시 50분부터 55분 사이에)
/ 분할 지정 * 6-18/6 * * * (모든 6시부터 18시 사이 6시간 간격으로)

여러 가지 수식을 활용하여 복합적으로 사용될 수도 있다.

 

 

2. 작업 리스트 수정

  - 본래는 수정, 삭제가 모두 있으나 수정을 통해서 삭제가 가능하므로 여기서 처리하고자 한다.

 

  1) 명령 사용방법

crontab [-u lgnUsr] -e

명령을 치면 우리에게 익숙한 vim 화면처럼 나온다.

vim을 수정하듯 처리하고 저장하고 나오면 된다.

 

다만 조심해야 할 것은 vi crontab이나 crontab -e | grep처럼 명령을 사용할 경우, 원하는 결과를 얻을 수 없을 것이다.

 

  2) 주석처리

 

  # 을 사용하면 해당 라인을 무시한다.

  그러나 코멘트와 비활성화한 배치와 구분되게 작성하면 좋다.

  더 이상 사용하지 않게 된 소스는 1줄, 코멘트는 2 줄어 들여 쓰기를 하는 방법도 있다.

 

  3) 자동 재부팅

 

일반적으로 reboot 명령은 슈퍼유저만 가능하다.

먼저 재부팅 권한을 가진 유저로 crontab을 아래와 같은 순서로 추가하도록 하자.

# step 1. sign in su
su -- root
# 일반적으로 슈퍼유저는 권한을 수정하거나 삭제하지 않은 이상 root 나 admin 이다.

#step 2. use crontab -e
crontab -e
# crontab 입력 화면에서 하기 내용을 기입한다.

#step 3. add line 
## Reboot 2019.10.29. botbinoo.
00 04 * * * reboot

 

재부팅 권한이 있는 사용자가 해당 배치 작업을 가지고 있다면 해당 서버는 매일 새벽 4시마다 서버를 켰다가 끄게 된다.

 


crontab 은 별도로 적용을 위해 프로그램을 다시 켜거나 재기동을 할 필요가 없다.

 

 

 

 

참고 : https://blog.acronym.co.kr/360

 

자동 배치 처리를 위한 crontab 사용법

리눅스와 같은 유닉스 계열에서는 주기적으로 자동 배치 처리를 하기 위해서 쉘 스크립트와 crontab을 사용합니다. 즉, 쉘 프로그램을 crontab에 등록된 시간에 자동으로 실행하도록 하는 것으로 서버 로그 정리,..

blog.acronym.co.kr

 

반응형

'programming > OS (Linux, Windows)' 카테고리의 다른 글

[Linux] File Descriptor  (0) 2019.11.21