Files
URBM/plugin/rc.urbm
T

78 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
DAEMON=/usr/local/sbin/urbmd
PIDFILE=/run/urbm/urbm.pid
LOGFILE=/var/log/urbm.log
is_daemon_pid() {
PID=${1:-}
[ -n "$PID" ] || return 1
EXE=$(readlink "/proc/$PID/exe" 2>/dev/null)
[ "$EXE" = "$DAEMON" ] || [ "$EXE" = "$DAEMON (deleted)" ]
}
start() {
mkdir -p /run/urbm /var/lib/urbm /boot/config/plugins/urbm
chmod 0750 /run/urbm /var/lib/urbm
chmod 0700 /boot/config/plugins/urbm
if [ -s "$PIDFILE" ] && is_daemon_pid "$(cat "$PIDFILE")"; then
return 0
fi
rm -f "$PIDFILE" /run/urbm/urbm.sock
nohup "$DAEMON" >>"$LOGFILE" 2>&1 &
echo $! >"$PIDFILE"
for _ in $(seq 1 50); do
[ -S /run/urbm/urbm.sock ] && return 0
is_daemon_pid "$(cat "$PIDFILE" 2>/dev/null)" || break
sleep 0.1
done
rm -f "$PIDFILE"
echo "urbmd failed to create its API socket" >&2
return 1
}
stop() {
STOPPED=0
if [ -s "$PIDFILE" ]; then
PID=$(cat "$PIDFILE")
if is_daemon_pid "$PID"; then
kill "$PID" 2>/dev/null || true
for _ in $(seq 1 300); do
is_daemon_pid "$PID" || break
sleep 1
done
if is_daemon_pid "$PID"; then
echo "urbmd is still recovering workloads; refusing to force-kill it" >&2
return 1
fi
STOPPED=1
fi
rm -f "$PIDFILE"
fi
if [ "$STOPPED" -eq 0 ]; then
PIDS=$(pidof urbmd 2>/dev/null || true)
for PID in $PIDS; do
kill "$PID" 2>/dev/null || true
done
for _ in $(seq 1 300); do
[ -z "$(pidof urbmd 2>/dev/null)" ] && break
sleep 1
done
if [ -n "$(pidof urbmd 2>/dev/null)" ]; then
echo "urbmd is still recovering workloads; stop did not complete" >&2
return 1
fi
fi
rm -f /run/urbm/urbm.sock
}
case "${1:-}" in
start) start ;;
stop) stop ;;
restart) stop && start ;;
status)
if [ -s "$PIDFILE" ] && is_daemon_pid "$(cat "$PIDFILE")"; then echo "urbmd is running"; else echo "urbmd is stopped"; exit 1; fi
;;
*) echo "Usage: $0 {start|stop|restart|status}"; exit 2 ;;
esac