Добрый день, уважаемые господа.
1. TorrServer имеет тенденцию часто падать, написал watchdog скрипт, не без помощи нейросетей. Сам скрипт работает, если запустить его из терминала руками, но не запускается автоматически при ребуте.
2. Скрипт лежит в /opt/etc/init.d/ с именем S95torrserver
2.1 Я пробовал закидывать его в хуки ndm, но он все равно не работает автоматически
3. Я не очень хочу использовать ext-ui, так как там крутится куча всего ненужного, но я все равно попробовал - в webui показывается, что скрипт должен загружаться автоматически, но этого не происходит.
К сожалению, не хватает знаний, чтобы понять что не так и как сделать автозапуск при ребуте.
#!/bin/sh
NAME="torrserver"
DAEMON="/opt/sbin/torrserver"
PIDFILE="/var/run/${NAME}.pid"
WATCHDOG_PIDFILE="/var/run/${NAME}_watchdog.pid"
# Create /var/run if missing
[ -d /var/run ] || mkdir -p /var/run
# TorrServer options (if needed)
TORRSERVER_OPTS=""
start_daemon() {
echo "Starting $NAME..."
$DAEMON $TORRSERVER_OPTS >/dev/null 2>&1 &
TORR_PID=$!
echo $TORR_PID > "$PIDFILE"
echo "$NAME started with PID $TORR_PID"
}
start_watchdog() {
(
while true; do
if [ -f "$PIDFILE" ]; then
PID=$(cat "$PIDFILE")
if ! kill -0 "$PID" 2>/dev/null; then
echo "Watchdog: $NAME (PID: $PID) not running, restarting..."
start_daemon
fi
else
echo "Watchdog: PID file missing, starting $NAME..."
start_daemon
fi
sleep 5
done
) &
WATCHDOG_PID=$!
echo $WATCHDOG_PID > "$WATCHDOG_PIDFILE"
echo "Watchdog started (PID: $WATCHDOG_PID)"
}
stop_watchdog() {
if [ -f "$WATCHDOG_PIDFILE" ]; then
WD_PID=$(cat "$WATCHDOG_PIDFILE")
echo "Stopping watchdog (PID: $WD_PID)..."
kill "$WD_PID" 2>/dev/null
rm -f "$WATCHDOG_PIDFILE"
fi
killall S95torrserver 2>/dev/null
}
stop_daemon() {
if [ -f "$PIDFILE" ]; then
PID=$(cat "$PIDFILE")
echo "Stopping $NAME (PID: $PID)..."
kill "$PID" 2>/dev/null
rm -f "$PIDFILE"
echo "$NAME stopped"
else
echo "$NAME not running"
fi
}
start() {
if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then
echo "$NAME already running (PID: $(cat $PIDFILE))"
return 1
fi
start_daemon
start_watchdog
}
stop() {
echo "Stopping $NAME service..."
stop_watchdog
stop_daemon
}
restart() {
stop
sleep 2
start
}
status() {
if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then
echo "$NAME running (PID: $(cat $PIDFILE))"
else
echo "$NAME not running"
fi
if [ -f "$WATCHDOG_PIDFILE" ] && kill -0 "$(cat "$WATCHDOG_PIDFILE")" 2>/dev/null; then
echo "Watchdog running (PID: $(cat $WATCHDOG_PIDFILE))"
else
echo "Watchdog not running"
fi
}
case "$1" in
start) start ;;
stop) stop ;;
restart) restart ;;
status) status ;;
*) echo "Usage: $0 {start|stop|restart|status}" ;;
esac
exit 0