Acidpop Software

Hyper-V 에 XPEnology 를 설치 해서 사용을 하고

 

xpebot 을 개발하여 사용 하던 중 불편한 사항이 있어서 만들어 본 스크립트이다.

 

필자는 Windows 에 일정 시간이 되면 절전 모드로 진입 하도록 작업 스케쥴러에 등록을 해놓은 상태 이다.

 

그리고 집에 있는 라즈베리파이를 활용해서 필요할때 WOL 패킷을 보내 서버를 다시 시작 하도록 하여 사용을 한다.

 

문제는 절전모드에서 다시 시작 될때 Hyper-V 역시 VM 들을 저장된 상태에서 시작 하도록 한다는 점이다.

 

이렇게 시작된 VM 들 중 XPEnology 의 xpebot 은 네트워크 재연결을 시도하지 않는다.

 

telepot 라이브러리 단에서도 네트워크 연결이 끊겼다는 이벤트도 없다..

 

즉, ssh 로 접속해서 수동으로 bot.sh restart 를 해줘야 한다는것인데 여간 귀찮은 일이 아니다.

 

Telegram 의 경우 특정 포트로 연결을 하기 때문에 다음 스크립트를 이용해서 해당 포트가 Established 되어 있는지 체크 하고

 

없다면 bot 을 재시작 하도록 하는 스크립트를 만들어 보았다.

 

DSM 5.x 사용자는 아래의 스크립트를 사용.

 

#! /volume1/homes/admin/xpebot/bash
# bash 경로는 각각 bash 가 존재 하는 디렉토리 경로로 변경 하여 준다.

echo $(date +"%Y-%m-%d %H:%M:%S") "Telegram bot monitor script"
  
PID=($(ps w | grep xpebot| grep -v "grep" | awk '{print $1}'))
echo $(date +"%Y-%m-%d %H:%M:%S") "PID : " $PID
if [ -z $PID ]
then
	echo $(date +"%Y-%m-%d %H:%M:%S") "Telegram Bot is not connect, trying restart bot."
	# 아래 코드는 필히 xpebot 이 설치된 경로로 변경해 주어야 한다.
	/volume1/homes/admin/xpebot/bot.sh restart
	echo "restart"
	exit 0
fi
COUNT=($(netstat -nap | grep $PID | grep "ESTA" | wc -l))
echo $(date +"%Y-%m-%d %H:%M:%S") "COUNT : " $COUNT

if [ $COUNT -le 0 ]
then
	echo $(date +"%Y-%m-%d %H:%M:%S") "Telegram Bot is not connect, trying restart bot."
	# 아래 코드는 필히 xpebot 이 설치된 경로로 변경해 주어야 한다.
	/volume1/homes/admin/xpebot/bot.sh restart
fi

 

 

DSM 6.0 사용자는 아래의 스크립트를 사용.

 

#! /usr/bin/bash

echo $(date +"%Y-%m-%d %H:%M:%S") "Telegram bot monitor script"
  
PID=($(ps -ef | grep xpebot| grep -v "grep" | awk '{print $1}'))
echo $(date +"%Y-%m-%d %H:%M:%S") "PID : " $PID
if [ -z $PID ]
then
	echo $(date +"%Y-%m-%d %H:%M:%S") "Telegram Bot is not connect, trying restart bot."
	# 아래 코드는 필히 xpebot 이 설치된 경로로 변경해 주어야 한다.
	/volume1/homes/admin/xpebot/bot.sh restart
	echo "restart"
	exit 0
fi
COUNT=($(netstat -nap | grep $PID | grep "ESTA" | wc -l))
echo $(date +"%Y-%m-%d %H:%M:%S") "COUNT : " $COUNT

if [ $COUNT -le 0 ]
then
	echo $(date +"%Y-%m-%d %H:%M:%S") "Telegram Bot is not connect, trying restart bot."
	# 아래 코드는 필히 xpebot 이 설치된 경로로 변경해 주어야 한다.
	/volume1/homes/admin/xpebot/bot.sh restart
	echo "restart"
fi

 

 

위 코드를 복사하여 xpebot 이 설치된 경로에 botmonitor.sh 로 저장하자.

 

당연히 12번쨰와 23번째 줄에 있는 /volume1/homes/admin/xpebot/bot.sh 이 부분은

 

xpebot 이 설치된 경로로 바꿔주어야 한다.

 

저장을 하고 해당 파일에 실행 권한을 주어야 한다.

 

chmod 755 botmonitor.sh

 

 

----------- 2016.11.29 추가 ---------

 

DSM 5.2 에서 아래의 작업 스케쥴러가 제대로 작동하지 않는 경우가 있다.

 

crontab 에 직접 등록하는 방법을 이용하자.

 

vi /etc/crontab

 

위 명령을 이용하여 crontab 파일을 연다.

 

가장 마지막 줄에 다음과 같이 추가 하여 준다.

 

*       *       *       *       *       root    /volume1/homes/admin/xpebot/botmon.sh >> /var/log/botmon.log

 

botmon.sh 경로는 각각 개인의 경로에 맞게 수정하여 준다.

 

넓은 간격은 탭으로 띄워준다.

 

모두 * 로 표기 하면 1분에 한번씩 작동 한다.

 

 

해당 파일을 저장(esc 키 한번 누르고 : (콜론)키 한번 누르고 wq 를 입력하고 엔터)

 

DSM 관리 페이지에서 DSM 을 재시작 하면 해당 스크립트가 1분에 한번씩 작동할 것이다.

 

------------------------------------

 

 

 

 

권한이 주어 졌다면 해당 스크립트를 1분에 한번씩 실행 되도록 해보자.

 

DSM 에 접속 하여 제어판 -> 작업 스케쥴러로 이동한다.

 

 



생성 -> 사용자 정의 스크립트를 클릭한다.




일반 탭에서는 위와 같이 설정해준다.


작업명은 xpebot monitor 라고 하자 (아무렇게나 써도 된다.)


사용자는 root


사용자 정의 스크립트는 위에서 저장했던 botmonitor.sh 파일의 전체 경로를 써준다.





 스케쥴 탭으로 이동 하여 위와 같이 설정 한다.


다음 일수 후 실행 -> 매일


첫 실행시간 -> 00:00

주기 : 매 1분마다


마지막 실행 시간 -> 23:59



위와 같이 설정 후 확인 버튼을 클릭한다.



여기까지 설정 되었다면 끝이다.



이 스크립트는 1분에 한번씩 xpebot 이 실제로 네트워크에 연결 되어 있는지 체크를 하고


연결이 끊어졌다면 xpebot 을 재시작 하도록 만들어 놓은 스크립트이다.


필자와 같이 Hypver-V 를 이용해서 xpenology 를 사용하고 xpebot 을 사용하는 사용자라면 유용한 팁이 될것이라 생각된다.




티스토리 툴바