Files
nullcart/electrum-daemon/docker-entrypoint.sh
T
nobswebdev f04c21ec17 Fix Electrum daemon recovery and shutdown in Docker.
Clear stale locks on startup via electrum stop, use correct stop on SIGTERM, and keep the daemon alive with wait so graceful restarts do not leave a lockfile crash loop.
2026-10-16 23:30:04 +02:00

62 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
NETWORK_FLAG="--${ELECTRUM_NETWORK}"
WALLET_PATH="/electrum/wallet/${ELECTRUM_WALLET_NAME}"
DATA_DIR="/electrum/data"
LOAD_WALLET_MAX_ATTEMPTS=90
DAEMON_STARTUP_WAIT_SECONDS=5
run_electrum() { electrum "${NETWORK_FLAG}" --dir "${DATA_DIR}" "$@"; }
run_electrum_offline() { electrum --offline "${NETWORK_FLAG}" --dir "${DATA_DIR}" "$@"; }
maybe_stop_electrum() {
run_electrum stop 2>/dev/null || true
}
mkdir -p /electrum/wallet "${DATA_DIR}"
chmod 700 /electrum/wallet
if [[ ! -f "${WALLET_PATH}" ]]; then
echo "Creating ${ELECTRUM_NETWORK} wallet at ${WALLET_PATH}..."
run_electrum_offline create -w "${WALLET_PATH}" --password "${ELECTRUM_WALLET_PASSWORD}"
chmod 600 "${WALLET_PATH}" 2>/dev/null || true
echo "Wallet created at ${WALLET_PATH}"
fi
maybe_stop_electrum
run_electrum_offline setconfig rpcuser "${ELECTRUM_DAEMON_RPC_USER}"
run_electrum_offline setconfig rpcpassword "${ELECTRUM_DAEMON_RPC_PASSWORD}"
run_electrum_offline setconfig rpchost 0.0.0.0
run_electrum_offline setconfig rpcport "${ELECTRUM_DAEMON_PORT}"
run_electrum_offline setconfig server "${ELECTRUM_SERVER}"
trap 'run_electrum stop || true' SIGTERM SIGINT
echo "Starting Electrum daemon..."
run_electrum daemon &
echo "Waiting for daemon connection (${DAEMON_STARTUP_WAIT_SECONDS}s)..."
sleep "${DAEMON_STARTUP_WAIT_SECONDS}"
load_wallet_attempt=0
echo "Loading wallet..."
until run_electrum load_wallet -w "${WALLET_PATH}" --password "${ELECTRUM_WALLET_PASSWORD}"; do
load_wallet_attempt=$((load_wallet_attempt + 1))
if [[ load_wallet_attempt -ge LOAD_WALLET_MAX_ATTEMPTS ]]; then
echo "Timed out waiting to load wallet into Electrum daemon" >&2
exit 1
fi
echo "Load wallet attempt ${load_wallet_attempt}/${LOAD_WALLET_MAX_ATTEMPTS} failed. Daemon may not be ready yet. Retrying in 1s..."
sleep 1
echo "Loading wallet..."
done
wait