########################################################################## # Shellscript: diskd - disk daemon - copy files from spool dir to floppy # Author : Heiner Steven (heiner.steven@odn.de) # Date : 1994-03-18 # SCCS-Id. : @(#) diskd 1.2 04/02/18 ########################################################################## # Description # ########################################################################## PN=`basename "$0"` # Program name VER='1.2' : ${DISKSPOOL:=$HOME/disk} # spool directory : ${FLOPPYDIR:=/floppy/backup} Console=/dev/console # output device n=10 # max. Anzahl Zugriffsfehler Intervall=120 # Intervall, in dem auf neue Dateien geprueft wird Hilfetext () { echo "$PN - Spoolverzeichnis auf Diskette kopieren, Version $VER (stv '94)" echo "Aufruf: $PN [-d Spoolverzeichnis] [-i Intervall] [-m Maxversuche]" echo " -d: Spoolverzeichnis (Vorgabe: $DISKSPOOL)" echo " -i: Intervall, in dem auf neue Dateien geprueft wird (Vorgabe: $Intervall)" echo " -m: Max. Anzahl Zugriffsfehler auf Diskette vor Abbruch (Vorgabe: $n)" exit 1 } Msg () { for i do echo "$PN: $i" > $Console done } Abbruch () { Msg "$@" exit 1 } # signal handler cleanup () { trap '' 1 2 3 15 # do not let other signals interrupt us eject floppy echo "$PN: terminated (`date`)" > "$Console" trap 1 2 3 15 } set -- `getopt 'hi:m:d:' "$@" || Hilfetext` while [ $# -gt 0 ] do case "$1" in -i) Intervall="$2"; shift ;; -m) n="$2"; shift ;; -d) DISKSPOOL="$2"; shift ;; --) break ;; -h) Hilfetext ;; -*) Hilfetext ;; esac shift done shift # abschliessendes '--' von getopt [ -d $DISKSPOOL -a -x "$DISKSPOOL" -a -w "$DISKSPOOL" ] || Abbruch "Ungueltiges Spoolverzeichnis (DISKSPOOL=$DISKSPOOL)" \ "(Verzeichnis vorhanden? Schreib- und Ausfuehrungsrechte?)" cd $DISKSPOOL [ -d "$FLOPPYDIR" ] || volcheck [ -d "$FLOPPYDIR" ] || Fatal "cannot access $FLOPPYDIR" Msg "started, PID=$$ (`date`)" trap 'cleanup' 0 trap "exit 2" 1 2 3 15 k=0 while : do sleep $Intervall Files=`ls` [ -z "$Files" ] && continue for i in `ls` do Error=`cp "$i" "$FLOPPYDIR" 2>&1` || { k=`expr $k + 1` if [ $k -le $n ] then Msg "Error: $Error" "($k. of $n tries)" else Abbruch "aborting." fi break } rm -f $i 2>/dev/null k=0 done done