48 lines
1.4 KiB
Bash
Executable File
48 lines
1.4 KiB
Bash
Executable File
#!/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
|