#!/bin/sh # # /usr/local/dsm/sbin/dsmbackup # # incremental DSM backup # # 2013-10-24 RS@MPDL # ## pre # id progname=`basename $0` dirname=`dirname $0` # pre-sets rc=0 opt_n=0 opt_v=0 opt_q=0 opt_l=0 opt_o=0 opt_fi= opt_dsmci= # functions usage () { echo "error: $@ usage: $progname ..." >&2 exit 254 } ## main # parse command line options while [ ! -z "$1" ] do case "$1" in -h | -help ) usage "help wanted" ;; -v | -n | -l | -o ) id=opt_`echo X$1 | sed 's/^X-//'` eval val=\$$id val=`expr $val + 1` eval $id=$val ;; +v ) id=opt_`echo X$1 | sed 's/^X+//'` eval val=\$$id [ $val -gt 0 ] && val=`expr $val - 1` eval $id=$val ;; -fi ) [ -z "$2" ] && usage "missing argument for option $1" id=opt_`echo X$1 | sed 's/^X\-//'` val="$2" eval $id=$val shift ;; -- ) shift opt_dsmci="$@" break ;; -* | +* ) usage "unexpected option: $1" ;; * ) for var in opt_fi do eval val=\$$var if [ -z "$val" ] then eval $var="$1" break fi done esac shift done # pid file pidfile=/var/run/$progname.pid if [ -f $pidfile ] then pid=`cat $pidfile` if [ ! -z "$pid" -a -d /proc/$pid ] then echo "$progname: found $progname (pid: $pid) already running - aborted" >&2 exit 249 fi fi echo $$ > $pidfile # trap to remove pid file trap "rm -f $pidfile" QUIT TERM EXIT # dsm settings DSM_LOG=/var/log export DSM_LOG # servername handling: # to easily address any non-default TSM server stanza name, # please, read "dsm-servername.incl" dsm_incl=dsm-servername.incl [ -f $dsm_incl ] && . $dsm_incl # short cuts dsmbackup_se=${servername:+"-server=$servername"} dsmbackup_cmd="dsmc i $opt_fi $opt_dsmci $dsmbackup_se" dsmbackup_log=$DSM_LOG/${progname}.log dsmbackup_pru=$DSM_LOG/${progname}.pru # prune log if [ -f $dsmbackup_log ] then date_fmt='+%Y-%m-%d %H:%M:%S' mod_date=`stat -c %y $dsmbackup_log` mod_date=`date -d "$mod_date" "$date_fmt"` run_date=`date "$date_fmt"` echo "# $run_date `uname -n` $progname[$$]: added $dsmbackup_log (from $mod_date)" >> $dsmbackup_pru cat $dsmbackup_log >> $dsmbackup_pru cp /dev/null $dsmbackup_log fi log () { if [ $opt_l -eq 0 ] then cat - >> $dsmbackup_log else tee -a $dsmbackup_log fi } # get options ( if [ $opt_o -gt 0 ] then _filter="grep DSM" [ $opt_v -gt 1 ] && _filter=cat set | $_filter dsmqopt_cmd="dsmc q opt $dsmbackup_se" $dsmqopt_cmd 2>&1 fi # action if [ $opt_n -eq 0 ] then $dsmbackup_cmd 2>&1 rc=$? # add rc [ $opt_q -ne 0 ] && echo "(rc=$rc)" fi ) | log ## end exit $rc