Dies ist eine alte Version des Dokuments!


Automatischer Neustart der dv_serial auf einem Banana Pi Pro

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"
    
    start() {
          if [ -e $PIDFILE ]; then
              ## Program is running, exit with error.
              echo "Error! $PROG is currently running!" 1>&2
              exit 1
          else
             cd $PROG_PATH
             sudo -u bananapi /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).

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information