チャンクが20秒以上増加しない場合は、サービスを再起動します(bash scipt)。

チャンクが20秒以上増加しない場合は、サービスを再起動します(bash scipt)。

私はBSC(Binance Smart Chain)でブロックチェーンノードを実行していますが、ブロックが増えているかどうかを定期的に(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このメソッドを使用すると、その値が現在であると仮定し、変数を介して現在のブロックの上位ビットを取得できます13083806systemctl 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;}'

おすすめ記事