如果块没有增加超过 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,假设它的值是当前13083806systemctl restart bsc如果计数在这段时间内没有增加,每 30 秒检查一次并执行的 bash 循环会是什么样子?

我的想法是然后将此脚本作为 systemd 服务运行,或者可能是 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;}'

相关内容