본문 바로가기
IT 지식/운영체제

자동 재실행 스크립트 만들기

by 이민우 2023. 5. 28.
728x90
반응형

개발 완료된 프로그램을 설치 및 배포하는 과정에서 문득 굼긍증이 들었다.

 

"이거... 에러나서 꺼지면 어떻게 하지?"

 

굳이 변명을 해보자면 지금까지 설치 및 배포를 진행해본 경험은 몇 차례 있었다.

 

하지만 지금까지는 부사수로써 사수를 보조하는 역할이 대부분이었다. 즉, 주도적으로 설치 및 배포를 해본 적이 없어 그냥 단순히 프로그램을 설치하고 배포하는 것만 생각했지 그 외의 부분까지 고려하는 시각을 가지지 못했었다. 늘 그 외의 부분은 사수이신 과장님께서 해주셨으니까...

 

그리고 내가 담당하고 개발한 프로그램들은 대부분 도커화 해서 개발했기 때문에, 에러가 나서 꺼질 경우 재실행 되는 것은 당연한 일이었다. 그냥 도커 컨테이너에 restart=always만 걸어놓으면 됐으니까.

 

결국 부랴부랴 자동으로 재실행하는 스크립트를 짜서 서버에 cron으로 추가를 해놓았다. 그리고 다음부터는 이 작업을 잊지 않기 위해 그리고 빠르게 작성하기 위해 방법을 간단하게 써놓을까 한다.

 

기준은 그냥 직전 포스팅을 위해 설치해놓았던 nifi를 재실행 하는 방법으로 해놓을까 한다.

 

 

 

프로그램이 꺼질 경우 재실행 스크립트

 

우선 nifi의 실행 명령어는 아래와 같다.

/root/nifi-1.21.0/bin/nifi.sh start

 

현재 nifi는 8443 포트에서 실행되도록 설정되어 있다.

이를 netstat -tnlp  명령어로 실행해보았을 때 다음와 결과가 나온다.

그리고 위 명령어의 결과의 wc -l 명령어로 줄수를 세어보면 1개가 됨을 알 수 있다.

 

즉 nifi가 정상작동할 경우 1개의 라인이 출력이 되어야 한다는 의미이므로,

위 명령어의 결과가 1개 라인이 아닌 경우 nifi를 재실행하면 된다.

 

그럼 얻은 정보를 토대로 쉘 스크립트를 생성해보자.

#!/bin/sh

LINE_COUNT=`netstat -tnlp | grep 8443 | wc -l`

# 위 명령어의 결과가 1이 아닐 경우
if [ $LINE_COUNT -ne 1 ]; then
        echo "nifi is not running... start nifi"
        # 나이파이 실행 명령어
        /root/nifi-1.21.0/bin/nifi.sh start
fi

 

쉘 스크립트가 정상 동작하는지 확인해본다.

# 실행중인 nifi 종료
/root/nifi-1.21.0/bin/nifi.sh stop

# 실행 권한 추가
chmod +x run_nifi_auto.sh

# 쉘 스크립트 실행
./run_nifi_auto.sh

 

잘 실행되는 것을 확인했으니, 이제 CRON에 등록해서 계속해서 nifi의 정상 작동 여부를 확인하고, 꺼져있을 경우 재실행하도록 해보자.

vim /etc/crontab

# 아래 내용 추가 후 저장
# 리눅스 크론 설정은 분-시-일-월-요일 이다. 즉, 밑의 cron은 5분에 한 번 작동한다.

# cron 재실행 (우분투는 cron, CentOS는 crond)
systemctl restart cron

 

이제 nifi를 다시 종료하고, 가장 가까운 5의 배수 분에 nifi가 재실행되는지 확인한다.

잘 실행된다!

 

 

728x90
반응형

'IT 지식 > 운영체제' 카테고리의 다른 글

내부망에서 apt 사용  (1) 2023.06.04
내부망에서 yum 사용  (0) 2022.12.10
[운영체제] Linux와 Unix  (0) 2021.05.16
[운영체제] 멀티 프로세스와 멀티 쓰레드  (0) 2021.04.02