-

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 을 사용하는 사용자라면 유용한 팁이 될것이라 생각된다.



저작자 표시 비영리 변경 금지
신고

  • prop 2016.09.19 21:53 신고

    wol을 사용중이라 껐다키면 작동을 안하길래 해당페이지 방버을 쓰려고 했으나..이상하게 작업스케쥴러에서 작동을 안하네요.
    /volume2/homes/admin/xpebot/botmonitor.sh
    이렇게 작성했는데 putty로 명령어를 치면 처음에는 파일없다고 나오다가 cd로 경로 들어가서 실행시킨 후 다시 위 명령어를 치면 인식해서 가져오네요. 권한도 줬는데 이유를 모르겠어요 ㅠ
    그래서 그냥.. '1. bash 파일을 복사' 방법으로 쓰고 있습니다. 이건 또 되긴하네요 ㅎ

    1. BlogIcon Acidpop acidpop 2016.09.20 10:33 신고

      botmonitor.sh 에서 11 번째 줄에 있는 경로는 바꾸셨나요?

    2. prop 2016.09.20 15:37 신고

      네 botmonitor.sh
      11번째줄

      /volume2/homes/admin/xpebot/bot.sh restart 로 해놨어요.

      근데 1. bash파일 복사 방법대로 해놓은 다음에

      bot.sh 파일의 #!/usr/bin/bash 로 되어있는 상태에서
      스케쥴러를 작동시키면 또 동작하더라구요.

    3. BlogIcon Acidpop acidpop 2016.09.21 09:36 신고

      prop 님의 시스템이 제가 구축한 xpenology 랑 좀 달라서 그런것 같습니다.

      제가 만들어 놓은 스크립트는
      /bin/sh 실행 파일을 가지고 작동하도록 되어 있는데 이게 없던지 버전이 다른던지 할것 같네요.

      #! /usr/bin/bash 이렇게 바꿔서 사용하셔도 됩니다.

    4. prop 2016.09.21 15:43 신고

      넵 그렇게 쓰도록 하겠습니다~

  • shekinah 2017.01.23 22:15 신고

    강좌 남겨주신대로 해봤는데 자동으로 되지 않아서 질문 드립니다..

    그대로 했는데 도저히 자동으로 되지 않아서...

    일단 crontab은
    ------------------------------------------------------------------------------------------------------------------------
    #minute hour mday month wday who command
    * * * * * root /volume1/homes/Noel/xpebot/Botmonitor.sh
    0 0 1 * * root /usr/syno/bin/syno_disk_health_record
    22 10 * * 4 root /usr/syno/bin/synomyds --report_info
    0,5,10,15,20,25,30,35,40,45,50,55 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 * * * root /tmp/synoschedtask --run id=1
    ------------------------------------------------------------------------------------------------------------------------
    이렇게 등록되어있고, 권한은 0775로 주었습니다.

    xpebot 폴더 안에 Botmonitor.sh 파일은
    ------------------------------------------------------------------------------------------------------------------------
    #! /volume1/homes/Noel/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/Noel/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/Noel/xpebot/bot.sh restart
    fi
    ------------------------------------------------------------------------------------------------------------------------

    이렇게 해두었습니다. 그런데 아무리 살펴봐도 잘못된 것이 없는 것 같은데 작동이 안됩니다..

    bash 부분은

    /usr/bin/bash로 해도, ./bash로 해도 작동이 되지 않네요~ 도움 부탁드립니다~

    1. BlogIcon Acidpop acidpop 2017.01.24 10:48 신고

      사용하시는 NAS 모델이
      XPEnology 인가요? 아니면 Synology 정식 NAS 인가요?

  • Shekinah 2017.01.24 17:14 신고

    XPEnology 모델입니다~ !

    1. BlogIcon Acidpop acidpop 2017.01.24 17:49 신고

      텔레그램 아이디 하나만 남겨 주세요
      댓글은 확인 하고 바로 삭제 할께요

  • 2017.01.24 21:06

    비밀댓글입니다

  • Shekinah 2017.01.25 20:27 신고

    리붓 후 다시 작동이 안됩니다...
    ---------------------------------------
    Noelesther> /volume1/homes/Noel/xpebot/Botmonitor.sh
    2017-01-25 20:22:36 Telegram bot monitor script
    2017-01-25 20:22:36 PID : 22391
    2017-01-25 20:22:36 COUNT : 0
    2017-01-25 20:22:36 Telegram Bot is not connect, trying restart bot.
    /volume1/homes/Noel/xpebot/Botmonitor.sh: /volume1/homes/Noel/xpebot/bot.sh: ./bash: bad interpreter: No such file or directory
    ---------------
    이렇게 뜨네요~ 직접 xpebot 폴더에 들어가서 ./Botmonitor.sh 하면 실행되지만... bash의 문제일까요~ 자동 작동이 안되네요 ㅠ

    1. shekinah 2017.01.25 21:25 신고

      해결한 것 같은데~
      bot.sh 파일의 맨 첫째줄을
      ./bash로 했던 것을 Botmonitor.sh와 같은 경로로 /volume1/homes/Noel/xpebot/bash로 하니깐 에러 없이 잘 작동하는 것 같습니다.
      많은 도움 주셔서 감사합니다~

    2. BlogIcon Acidpop acidpop 2017.01.26 09:00 신고

      Botmonitor.sh 를 제가 그렇게 변경 해놨었나요? ㅠㅠ
      일단 bash 파일은 전체 경로를 지정해주는게 좋습니다.

다른 카테고리의 글 목록

강좌/XPEnology 활용 카테고리의 포스트 목록