![청크가 20초 이상 증가하지 않으면 서비스를 다시 시작합니다(bash scipt).](https://linux55.com/image/199062/%EC%B2%AD%ED%81%AC%EA%B0%80%2020%EC%B4%88%20%EC%9D%B4%EC%83%81%20%EC%A6%9D%EA%B0%80%ED%95%98%EC%A7%80%20%EC%95%8A%EC%9C%BC%EB%A9%B4%20%EC%84%9C%EB%B9%84%EC%8A%A4%EB%A5%BC%20%EB%8B%A4%EC%8B%9C%20%EC%8B%9C%EC%9E%91%ED%95%A9%EB%8B%88%EB%8B%A4(bash%20scipt)..png)
저는 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;}'