#!/bin/sh # usr - uptime server reloader, v0.4 # Checks a health URL. After USR_FAILS failed checks in a row it runs USR_CMD. # Meant to be started once a minute by a systemd timer or cron. set -eu URL="${USR_URL:-http://127.0.0.1:8080/health}" CMD="${USR_CMD:-systemctl reload myapp}" FAILS="${USR_FAILS:-3}" TIMEOUT="${USR_TIMEOUT:-5}" STATE="${USR_STATE:-/run/usr.count}" count=$(cat "$STATE" 2>/dev/null || echo 0) if curl -fsS -m "$TIMEOUT" -o /dev/null "$URL"; then [ "$count" -gt 0 ] && logger -t usr "recovered after $count failed check(s)" echo 0 > "$STATE" exit 0 fi count=$((count + 1)) echo "$count" > "$STATE" logger -t usr "check $count/$FAILS failed for $URL" if [ "$count" -ge "$FAILS" ]; then logger -t usr "running: $CMD" sh -c "$CMD" && echo 0 > "$STATE" fi