리눅스 - 크론탭을 이용한 작업 스케줄링 방법
서버(우분투) 내에서 특정 시각에 실행되어야 하는 작업이 발생하여 크론탭을 이용한 스케줄링 작업 방법에 대해서 정리한다.
리눅스 - 크론탭을 이용한 작업 스케줄링 방법
크론탭(Crontab)이란?
먼저 크론탭은 리눅스 운영체제에서 배치 작업을 스케줄링 하기 위한 프로그램이다.
그렇기 때문에 크롭탭을 이용하면 특정 시각 또는 특정 일자에 원하는 작업이 실행되게 할 수 있어 정기적으로 어떤 작업이 필요할 때 이용하면 된다.
크론탭 설치 방법
크론탭이 설치 되어 있지 않다면 아래 명령어 순으로 입력하여 설치를 진행해준다.
먼저 업데이트를 해준다.
sudo apt update
cron 설치
sudo apt install cron
설치 확인
sudo service cron status
cron 서비스 시작
sudo service cron start
크론탭 설정 방법
설치가 완료되었다면 아래 명령어를 통해 vi 편집기로 들어가준다.
sudo vi /etc/crontab
vi 편집기를 통해 들어보면 다음과 같이 설명이 잘되어 있는 주석과 스케줄러가 걸려있는 항목들을 볼 수 있다.
시간의 경우 좌측부터 분 / 시 / 일 / 월 / 주 단위로 설정할 수 있으며, 이후로는 유저명 커맨트 형식으로 선언해주면 된다.
동작 테스트
먼저 해당 동작이 잘 동작하는지 확인하기 위해 가장 간단한 디렉토리 만들기를 해보자.
아래처럼 입력하면 매시 46분 마다 home/ubuntu 경로 하위에 test라는 디렉토리를 만들게 된다.
시간은 현재 테스트하고 있는 시간에서 가장 빠른 시간으로 설정해면 테스트해준다.
해당 시간이 되었다면 아래와 같이 만들어져 있는 것을 확인할 수 있다.
sh 파일을 통한 도커 재시작
다음으로는 sh 파일을 만들어서 특정 시간에 도커 컨테이너를 재시작할 수 있는 스케줄러를 설정해본다.
sh 파일 내부에는 도커 컨테이너를 재시작할 수 있는 명령어가 들어가 있으면 되고 crontab에서는 해당 sh 파일을 실행하도록 명령어를 추가해준다.
다음과 같이 만들면 5일 간격으로 12시에 커맨드에 선언한 sh 실행 명령어가 실행된다.
0 12 */5 * * ubuntu sh /home/ubuntu/restart.sh
sh 파일 내부에는 도커 재시작 명령어를 선언하면 된다.
docker restart docker-container-name
추가적으로 만약 도커의 실행 이름이 계속 바뀐다면 (무중단 배포를 위해 여러개 사용 시) 스크립트 내부에 if문을 추가하여
docker inspect 명령어를 통해 현재 실행 중인 도커 컨테이너 명을 가져와 사용 할수도 있으니 참고하자!
기본 컨테이너 정보 검색 명령어
docker inspect <container_name or id>
현재 실행중인 컨테이너 명령어 -> 해당 명령어의 반환값은 Boolean이므로 해당 명령어를 if문 내부에 넣으면 된다.
docker inspect -f '{{.State.Running}}' container_name