#! /bin/sh # detailed see https://www.vdr-portal.de/forum/thread/25863-shutdown-hook-f%C3%BCr-vdr-server/ # good helpful discussion ! # # # S00.custom Shutdown-Hook fuer vdr # # Version: 2005-01-05 Claus dot Thiemann at gmx dot de # # Die Variablen muessen an die verwendete Distri angepasst werden. # Das gilt vor allem fuer die svdrpsend.pl BASENAME="$(basename $0)" NETSTAT=/bin/netstat PATH=/sbin:/bin:/usr/sbin:/usr/bin RMTAB=/var/lib/nfs/rmtab SVDRP=/usr/share/vdr/svdrpsend.pl TMPFILE=/tmp/$BASENAME function f_tcp() { local N echo -n "Anzahl Verbindungen zu $1 auf Port $2: " N=$($NETSTAT --tcp --numeric | grep --count ":$2 ") echo $N [ $N -eq 0 ] && return 0 # Meldung ausgeben auf TV und SysLog MSG="$N Verbindung(en) zu $1 offen." # und zwar im Hintergrund wegen Broken Pipe Problem $SVDRP MESG $MSG > /dev/null & echo $MSG $NETSTAT --tcp --numeric | grep ":$2 " sleep 3 return $N } # Anmerkung zu nfs: Die Anzahl kann zu hoch sein. # Wenn ein Client kein umount gemacht hat, # wird der Eintrag nicht aus der $RMTAB geloescht # und ueberlebt auch den shutdown. function f_nfs() { local N local SATZ local HOST echo -n "Anzahl Eintraege in $RMTAB: " [ -s $RMTAB ] && N=$(grep --count ".*" $RMTAB) || N=0 echo $N [ $N -eq 0 ] && return 0 # Bereinigen der $RMTAB mittels ping auf die Hostnamen # Ist zwar nicht ganz sauber, aber besser als nichts cat /dev/null > $TMPFILE for SATZ in $(cat $RMTAB); do HOST=$(echo $SATZ | cut --delimiter=: --fields=1) ping -qnc 1 $HOST && echo $SATZ >> $TMPFILE done mv $TMPFILE $RMTAB N=$(grep --count ".*" $RMTAB) MSG="$N Verbindung(en) zu nfs offen." $SVDRP MESG $MSG > /dev/null & echo $MSG cat $RMTAB sleep 3 return $N } f_network() { local N=0 f_tcp Secure-Shell 22 || N=$[$N+$?] f_tcp Samba 139 || N=$[$N+$?] f_tcp Samba 445 || N=$[$N+$?] f_tcp Streamdev 2004 || N=$[$N+$?] f_tcp Streamdev 3000 || N=$[$N+$?] f_nfs || N=$[$N+$?] # Im Fehlerfall Anlegen einer Datei als Returncode-Ersatz [ $N -eq 0 ] || echo -n "$N" > $TMPFILE } # Loeschen der Returncode-Datei rm -f $TMPFILE # Aufruf der Haupt-Funktion mit oder ohne Syslog #f_network f_network | logger -i -t $BASENAME # Auswerten des Ergebnisses [ -e $TMPFILE ] || exit 0 N=$(cat $TMPFILE) rm -f $TMPFILE # Eigentlichen Shutdown-Hook ausloesen echo "ABORT_MESSAGE=\"$N Verbindungen offen.\"" echo "TRY_AGAIN=0" exit 0 # EOF