Showdown 자동 리셋 스크립트

category 서버/리눅스 서버 2019.06.24 01:05

안녕하세요? 쇼다운 쓰레드 실행시 멈춤이 있어서 스크립트로 모니터링하여 10분간 로그가 나오지 않을 경우 강제 리셋하는 명령을 추가해 보았습니다.


https://github.com/djjproject/showdownscripts


스크립트는 상기에 올려 두었습니다.


cron 으로 실행하거나 부팅 시 실행하시면 됩니다.


코드 설명은 아래와 같습니다.


#!/bin/bash


if pidof -o %PPID -x "$0"; then

   exit 1

fi


while true; do

    sleep 5

    SYSTEMTIME=`date "+%s"`

    SHOWDOWNTIME=`date -d "$(tail -n 1 /home/showdown/ShowDown.log | awk '{print $2}' | awk -F "," '{print $1}')" "+%s"`


    echo "showdown time : $SHOWDOWNTIME"

    echo "system time : $SYSTEMTIME"


    if [ `expr $SHOWDOWNTIME + 600` -le $SYSTEMTIME ]; then

        /usr/local/bin/showdownreset

        echo "showdownreset excuted..."

    fi

done



exit 0


2019-06-24 00:55:45,251   사이트05 드라마 1페이지 신규 토렌트 : 1 아스달 연대기.E08.190623.720p NEXT 1

2019-06-24 00:55:45,260   사이트05 드라마 1페이지 신규 토렌트 : 보이스3.E14.190623.720p NEXT

2019-06-24 00:55:45,268   사이트05 드라마 1페이지 신규 토렌트 : 특별기획드라마 조선생존기.E06.190623.720p NEXT


상기 쇼다운 로그를 보시면 필드가 3개로 이루어져 있습니다.


쇼다운에 최종적으로 로그가 찍힌 부분을 아래의 코드로 걸러냅니다.


date -d "$(tail -n 1 /home/showdown/ShowDown.log | awk '{print $2}' | awk -F "," '{print $1}')" "+%s"


tail 명령으로 -n 1 마지막 줄을 뽑아내고 pipe 명령을 통해 awk 에서 2번째 필드를 출력합니다.


00:55:45,268


여기서 awk 를 한번 더 사용하여 -F "," 구문을 이용해 콤마로 필드 구분을 하고 '{print $1}' 으로 첫 번째 필드를 출력합니다.


00:55:45


이 것을 date -d "00:55:45" "+%s" 를 통해 1970년 부터 해당 시각 까지 초로 변환합니다. 상기 값과 맞지 않지만 대략 이렇게 바뀝니다.


1561305559


현재 시스템 시각의 경우에도 마찬가지로 date 명령으로 1970년으로 부터 초로 변경합니다.


date "+%s"


시스템 시각과 쇼다운 시간을 비교하기 위해 if 구문을 사용하고 쇼다운 시간에서 10분 지난 값이 현재 시각보다 작으면 showdownreset 명령을 실행하게 되어 있습니다.


SYSTEMTIME=`date "+%s"`

SHOWDOWNTIME=`date -d "$(tail -n 1 /home/showdown/ShowDown.log | awk '{print $2}' | awk -F "," '{print $1}')" "+%s"`


if [ `expr $SHOWDOWNTIME + 600` -le $SYSTEMTIME ]; then

    /usr/local/bin/showdownreset

    echo "showdownreset excuted..."

fi


상기 if 문에서 expr 문으로 600초를 더 한 값을 비교합니다.


결과적으로 10분동안 로그가 발생하지 않을 경우 아래처럼 쇼다운 서버가 재시작 됩니다. (아래는 시간 값을 작게 하여 실행해본 결과입니다.)


root@AOL-Debian:~# /home/showdownreset.sh 

showdown time : 1561304419

system time : 1561304637

showdownreset excuted...

nohup: appending output to 'nohup.out'

showdown time : 1561304642

system time : 1561304642


한편, 날짜가 바뀌는 경우, 어제 21시 30분과 오늘 0시 30분 이렇게 구성이 되면 에러가 발생합니다. 날짜 부분을 넣지 않았기 때문입니다. 그러나 실제로 사용하는 부분에서 스크립트가 계속 돌게 되면 시간이 뒤로 되는 경우는 없다고 생각하여 상기 스크립트를 작성하였습니다.


상기 스크립트를 부팅시, 혹은 crontab 에 등록하여 사용하시길 바랍니다.


감사합니다.


댓글을 달아 주세요