Jump to content

Recommended Posts

Posted

Добрый день, уважаемые господа.

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

 

Posted

Вам проще watchdog просто в cron на раз в минуту поставить.

Скрпиты в ndm неправильно делать длящимися, они через 240 секунд принудительно завершаются.

  • Thanks 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

This site uses cookies. By clicking "I accept" or continuing to browse the site, you authorize their use in accordance with the Privacy Policy.