diff options
Diffstat (limited to 'start-monzerod.sh')
| -rwxr-xr-x | start-monzerod.sh | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/start-monzerod.sh b/start-monzerod.sh new file mode 100755 index 000000000..6b3ac8c2f --- /dev/null +++ b/start-monzerod.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +set -euo pipefail + +PROJECT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +DAEMON_BIN="${MONZERO_DAEMON_BIN:-$PROJECT_DIR/build/bin/monzerod}" +DATA_DIR="${MONZERO_DATA_DIR:-$HOME/.monzero-auto-test}" +P2P_PORT="${MONZERO_P2P_PORT:-16174}" +RPC_PORT="${MONZERO_RPC_PORT:-16175}" +ZMQ_PORT="${MONZERO_ZMQ_PORT:-16176}" + +if [[ ! -x "$DAEMON_BIN" ]]; then + printf 'Error: daemon executable not found: %s\n' "$DAEMON_BIN" >&2 + printf 'Build monzerod first, or set MONZERO_DAEMON_BIN.\n' >&2 + exit 1 +fi + +daemon_ready() { + curl --silent --fail --max-time 2 \ + --header 'Content-Type: application/json' \ + --data '{}' \ + "http://127.0.0.1:$RPC_PORT/get_info" >/dev/null 2>&1 +} + +if daemon_ready; then + printf 'Monzero daemon is already running at 127.0.0.1:%s.\n' "$RPC_PORT" + exit 0 +fi + +if command -v ss >/dev/null && ss -ltn | awk '{print $4}' | grep -Eq "(^|:)$RPC_PORT$"; then + printf 'Error: port %s is occupied, but it is not responding as a Monzero daemon.\n' "$RPC_PORT" >&2 + exit 1 +fi + +mkdir -p "$DATA_DIR" + +printf 'Starting Monzero daemon...\n' +printf ' Data: %s\n P2P: %s\n RPC: %s\n ZMQ: %s\n' "$DATA_DIR" "$P2P_PORT" "$RPC_PORT" "$ZMQ_PORT" + +"$DAEMON_BIN" \ + --detach \ + --data-dir "$DATA_DIR" \ + --p2p-bind-port "$P2P_PORT" \ + --rpc-bind-port "$RPC_PORT" \ + --zmq-rpc-bind-port "$ZMQ_PORT" \ + --add-priority-node 82.165.112.237:6174 \ + --no-igd + +for _ in {1..30}; do + if daemon_ready; then + info="$(curl --silent --max-time 2 --header 'Content-Type: application/json' --data '{}' "http://127.0.0.1:$RPC_PORT/get_info")" + python3 - "$info" <<'PY' +import json, sys +data = json.loads(sys.argv[1]) +print(f"Daemon ready: height={data.get('height', '?')} synchronized={str(data.get('synchronized', False)).lower()}") +PY + printf 'Log: %s/monzero.log\n' "$DATA_DIR" + exit 0 + fi + sleep 1 +done + +printf 'Error: daemon did not become ready within 30 seconds.\n' >&2 +printf 'Check: %s/monzero.log\n' "$DATA_DIR" >&2 +exit 1 |
