저는 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;}'