#!/bin/bash DAEMON=/usr/local/sbin/urbmd PIDFILE=/run/urbm/urbm.pid LOGFILE=/var/log/urbm.log is_daemon_pid() { PID=${1:-} [ -n "$PID" ] && [ "$(readlink -f "/proc/$PID/exe" 2>/dev/null)" = "$DAEMON" ] } 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 30); do is_daemon_pid "$PID" || break sleep 1 done is_daemon_pid "$PID" && kill -9 "$PID" 2>/dev/null || true 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 30); do [ -z "$(pidof urbmd 2>/dev/null)" ] && break sleep 1 done for PID in $(pidof urbmd 2>/dev/null); do kill -9 "$PID" 2>/dev/null || true done 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