Automatischer Neustart der dv_serial auf einem Banana Pi Pro

Warum diese Skripte?

Manchmal kann es unter verschiedenen Umständen zum Absturz der dv_serial kommen. Die Ursachen können vielfältig sein und werden hier nicht näher beleuchtet. Um dieses Problem zumindest automatisch zu beheben, sind nachstehende Scripte entstanden.

Voraussetzungen

Das Script setzt voraus, dass die dv_serial unter /home/bananapi/DV4mini gespeichert ist (sieht man, wenn man im Script den „PROG_PATH“ sich anschaut… kann an dieser Stelle an die eigene Installation geändert werden.

Skripte

/etc/init.d/dv_serial.sh

#!/bin/bash
### BEGIN INIT INFO
#
# Provides:             dv_serial
# Required-Start:       $remote_fs
# Required-Stop:        $remote_fs
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    dv_serial initscript

#
### END INIT INFO
## Fill in name of program here.
PROG="dv_serial"
PROG_PATH="/home/bananapi/DV4mini/"
PROG_ARGS=""
PIDFILE="/var/run/dv_serial.pid"
USER="bananapi"

start() {
      if [ -e $PIDFILE ]; then
          ## Program is running, exit with error.
          echo "Error! $PROG is currently running!" 1>&2
          exit 1
      else
          ## Change from /dev/null to something like /var/log/$PROG if you want to save output.
          cd $PROG_PATH
          echo "******* RESTART of dv_serial *******" >> /var/log/dv_serial.log
          sudo -u $USER /usr/bin/stdbuf -i0 -o0 -e0 ./$PROG $PROG_ARGS 2>&1 >> /var/log/dv_serial.log &
          echo "$PROG started"
          touch $PIDFILE
          sleep 2
          ionice --class 1 --pid="$(pidof dv_serial)"
          renice -10 --pid "$(pidof dv_serial)"
      fi
}

stop() {
      if [ -e $PIDFILE ]; then
          ## Program is running, so stop it
         echo "$PROG is running"
         rm -f $PIDFILE
         killall $PROG
         echo "$PROG stopped"
      else
          ## Program is not running, exit with error.
          echo "Error! $PROG not started!" 1>&2
          exit 1
      fi
}

## Check to see if we are running as root first.
## Found at http://www.cyberciti.biz/tips/shell-root-user-check-script.html
if [ "$(id -u)" != "0" ]; then
      echo "This script must be run as root" 1>&2
      exit 1
fi

case "$1" in
      start)
          start
          exit 0
      ;;
      stop)
          stop
          exit 0
      ;;
      reload|restart|force-reload)
          stop
          sleep 2
          start
          exit 0
      ;;
      **)
          echo "Usage: $0 {start|stop|reload}" 1>&2
          exit 1
      ;;
esac
exit 0
### END

Jetzt noch mein „watchdog“ script, was ich unter /root/scripts/watchdog.sh laufen habe:

    #!/bin/bash
    if [ ! "$(pidof dv_serial)" ]
    then
      date >> /root/scripts/restart.log
      rm /var/run/dv_serial.pid
      /etc/init.d/dv_serial.sh start
    fi
    sleep 30
    if [ ! "$(pidof dv_serial)" ]
    then
      date >> /root/scripts/restart.log
      rm /var/run/dv_serial.pid
      /etc/init.d/dv_serial.sh start
    fi
    ### END

Crontab-Eintrag

Den Watchdog trägt man mit „sudo crontab -e“ in die Crontab des Root ein, sieht dann folgendermaßen aus:

    # m h  dom mon dow   command
      * *  *   *   *     /root/scripts/watchdog.sh

Das bewirkt nun, dass minütlich das Script aufgerufen wird, welches quasi 2 mal in der Minute (nach einer Pause von 30 Sekunden) prüft, ob der Prozess noch vorhanden ist… es wird also automatisch nach dem Start die dv_serial gestartet über den Watchdog.

Abschließendes

Möchte man das Script auf einem Raspberry Pi einsetzen, ist der Installationspfad und der Benutzer des Programmaufrufs auf „pi“ anzupassen (also die Stellen, wo bananapi steht, durch pi ersetzen).

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information