#!/system/bin/sh set -eu readonly RPC_HOST="127.0.0.1" readonly RPC_PORT="8444" readonly RPC_TIMEOUT_SEC="60" readonly POLL_INTERVAL_SEC="15" readonly NODE_NAME="montana-node" probe_rpc() { /system/bin/timeout "$RPC_TIMEOUT_SEC" /system/bin/nc -z "$RPC_HOST" "$RPC_PORT" } check_dumpable_off() { local pid pid="$(pidof "$NODE_NAME" || true)" [ -z "$pid" ] && return 0 local dumpable dumpable="$(awk '/^Dumpable:/ {print $2}' "/proc/$pid/status" 2>/dev/null || echo 1)" [ "$dumpable" = "0" ] } check_locked_pages() { local pid pid="$(pidof "$NODE_NAME" || true)" [ -z "$pid" ] && return 0 local locked_kb locked_kb="$(awk '/^VmLck:/ {print $2}' "/proc/$pid/status" 2>/dev/null || echo 0)" [ "$locked_kb" -gt 0 ] } while :; do if ! probe_rpc; then log -p w -t montana-watchdog "RPC unreachable on $RPC_HOST:$RPC_PORT, restarting $NODE_NAME" setprop ctl.restart "$NODE_NAME" sleep "$RPC_TIMEOUT_SEC" elif ! check_dumpable_off; then log -p e -t montana-watchdog "BLOCKING: $NODE_NAME PR_SET_DUMPABLE not zero, stopping node" setprop ctl.stop "$NODE_NAME" sleep "$RPC_TIMEOUT_SEC" elif ! check_locked_pages; then log -p e -t montana-watchdog "BLOCKING: $NODE_NAME has no locked pages, stopping node" setprop ctl.stop "$NODE_NAME" sleep "$RPC_TIMEOUT_SEC" fi sleep "$POLL_INTERVAL_SEC" done