montana/_internal-private/MontanaOS-archived-20260521/system/montana-watchdog.sh
2026-05-26 21:14:51 +03:00

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