diff --git a/docker/my-dojo/bitcoin/restart.sh b/docker/my-dojo/bitcoin/restart.sh index 072433b..b01a7ac 100644 --- a/docker/my-dojo/bitcoin/restart.sh +++ b/docker/my-dojo/bitcoin/restart.sh @@ -40,3 +40,13 @@ if [ "$COMMON_BTC_NETWORK" == "testnet" ]; then fi bitcoind "${bitcoind_options[@]}" +exitCode=$? + +if [ $exitCode -eq 0 ]; then + # Loop keeping the container up + # after bitcoind has been stopped + while true + do + tail -f /dev/null > /dev/null + done +fi diff --git a/docker/my-dojo/dojo.sh b/docker/my-dojo/dojo.sh index fd17f41..1627940 100755 --- a/docker/my-dojo/dojo.sh +++ b/docker/my-dojo/dojo.sh @@ -55,30 +55,50 @@ start() { # Stop stop() { + # Shutdown the bitcoin daemon if [ "$BITCOIND_INSTALL" == "on" ]; then + # Renewal of bitcoind onion address if [ "$BITCOIND_EPHEMERAL_HS" = "on" ]; then docker exec -it tor rm -rf /var/lib/tor/hsv2bitcoind fi - + # Stop the bitcoin daemon + echo "Preparing shutdown of dojo. Please wait." docker exec -it bitcoind bitcoin-cli \ -rpcconnect=bitcoind \ --rpcport=28256 \ --rpcuser="$BITCOIND_RPC_USER" \ --rpcpassword="$BITCOIND_RPC_PASSWORD" \ stop - - echo "Preparing shutdown of dojo. Please wait." - - bitcoindDown=$(timeout 3m docker wait bitcoind) - if [ $bitcoindDown -eq 0 ]; then - echo "Bitcoin server stopped." - else + # Check if the bitcoin daemon is still up + # wait 3mn max + i="0" + while [ $i -lt 18 ] + do + # Check if bitcoind rpc api is responding + timeout 5 docker exec -it bitcoind bitcoin-cli \ + -rpcconnect=bitcoind \ + --rpcport=28256 \ + --rpcuser="$BITCOIND_RPC_USER" \ + --rpcpassword="$BITCOIND_RPC_PASSWORD" \ + getblockchaininfo > /dev/null + # rpc api is down + if [[ $? > 0 ]]; then + echo "Bitcoin server stopped." + break + fi + # Pause before next try + sleep 5 + i=$[$i+1] + done + # Bitcoin daemon is still up + # => force close + if [ $i -eq 18 ]; then echo "Force shutdown of Bitcoin server." fi fi - + # Stop docker containers yamlFiles=$(select_yaml_files) - eval "docker-compose $yamlFiles down" + eval "docker-compose $yamlFiles stop" } # Restart dojo diff --git a/docker/my-dojo/overrides/bitcoind.install.yaml b/docker/my-dojo/overrides/bitcoind.install.yaml index 085b7be..5d7dba3 100644 --- a/docker/my-dojo/overrides/bitcoind.install.yaml +++ b/docker/my-dojo/overrides/bitcoind.install.yaml @@ -10,7 +10,7 @@ services: - ./.env - ./conf/docker-common.conf - ./conf/docker-bitcoind.conf - restart: on-failure + restart: always command: "/wait-for-it.sh tor:9050 --timeout=720 --strict -- /restart.sh" expose: - "8333"