Last active
January 12, 2019 19:15
-
-
Save jleskovar/dfc545148398d81715da02f61bf39b91 to your computer and use it in GitHub Desktop.
btcd watchdog
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
POST_INIT_SYNC_DELAY=60 | |
POLL_DELAY=60 | |
STALL_THRESHOLD=5 | |
if [ -z `pidof btcd` ]; then | |
echo "Starting btcd" | |
nohup btcd & | |
sleep $POST_INIT_SYNC_DELAY | |
fi | |
stalls=0 | |
while true; do | |
start=`btcctl --notls getinfo | jq -r .blocks` | |
sleep $POLL_DELAY | |
end=`btcctl --notls getinfo | jq -r .blocks` | |
echo "Processed $((end - start)) blocks in the last $POLL_DELAY seconds" | |
if [[ "$start" == "$end" ]]; then | |
if (( stalls > STALL_THRESHOLD )); then | |
echo "Too many stalls detected. Restarting btcd..." | |
kill `pidof btcd` | |
sleep 10 | |
nohup btcd & | |
stalls=0 | |
else | |
syncnode=`btcctl --notls getpeerinfo | jq -r '.[] | select(.syncnode == true) | .addr' | cut -f1 -d:` | |
if [ -z "$syncnode" ]; then | |
echo "Stall detected, but no syncnode found. Restarting btcd..." | |
kill `pidof btcd` | |
sleep 10 | |
nohup btcd & | |
stalls=0 | |
else | |
echo "Stall detected! Evicting potentially bad node $syncnode" | |
btcctl --notls node disconnect $syncnode | |
stalls=$(( stalls + 1 )) | |
fi | |
fi | |
fi | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This helped a lot