청크가 20초 이상 증가하지 않으면 서비스를 다시 시작합니다(bash scipt).

청크가 20초 이상 증가하지 않으면 서비스를 다시 시작합니다(bash scipt).

저는 BSC(바이낸스 스마트 체인)에서 블록체인 노드를 실행하고 있으며 블록이 증가하는지 주기적으로(30초) 확인하고 증가하지 않으면 systemd 서비스를 다시 시작하는 스크립트를 구현하고 싶습니다.

이것이 내가 시작한 방법입니다.

#!/bin/bash 

bsc_height=$(curl http://localhost:8545 -X POST -H "Content-Type: application/json" -d '{ "jsonrpc": "2.0","id": 0,"method": "eth_blockNumber"}' | awk -F ":" '{ print $4}' | sed 's|["{},]||g')
bsc_height_decimal=$(echo $((bsc_height)))

bsc_height_decimal이 방법을 사용하면 해당 값이 current라고 가정하고 변수를 통해 현재 블록의 상위 비트를 얻을 수 있습니다 13083806. systemctl restart bsc이 시간 동안 카운트가 증가하지 않으면 30초마다 확인하고 실행하는 bash 루프는 어떤 모습일까요?

내 생각은 이 스크립트를 시스템 서비스로 실행하거나 crontab으로 실행하는 것입니다. 최선의 접근 방식을 찾으려고 노력 중입니다. 어떻게 생각하시나요?

답변1

#!/bin/bash

declare -r WAIT_SEC='30'

bsc_height_decimal=
bsc_height_decimal_old=

while true; do
        bsc_height=$(curl http://localhost:8545 -X POST -H "Content-Type: application/json" -d '{ "jsonrpc": "2.0","id": 0,"method": "eth_blockNumber"}' | awk -F ":" '{ print $4}' | sed 's|["{},]||g')
        bsc_height_decimal=$(echo $((bsc_height)))
        if [ -n "$bsc_height_decimal_old" ] && [ "$bsc_height_decimal_old" -eq "$bsc_height_decimal" ]; then
                systemctl restart bsc
        fi
        bsc_height_decimal_old="$bsc_height_decimal"
        sleep "$WAIT_SEC"
done

그리고

awk -F ":" '{ print $4}' | sed 's|["{},]||g'

로 대체될 수 있다

awk -F ":" '{ output=$4; gsub("[\"{},]","",output); print output;}'

관련 정보