#!/usr/bin/sh
# $Id: bflsync,v 1.50 2017/03/05 12:09:40 fulford Exp $
# For support call: Clifford W Fulford on 0793 572 8612
# email: fulford@citylinux.com
# log issue: https://www.citylinux.com/belpark
#############################################################
cmd=$0
awk=/usr/bin/awk
ver=`echo "$Id: bflsync,v 1.50 2017/03/05 12:09:40 fulford Exp $"|awk '{print $3,$4,$5}'`
config=/usr/local/etc/bflsync.cf
email=fulford@citylinux.com
syntax="$cmd [[-c] [-d] [-e <recipient address>] [-q]]|[-V]|[-s]"
tmp=/tmp/`basename $cmd`-$$
>$tmp
trap "end=true" 15
trap "reconfig=true" 1
verbose=: # verbose output by default
while [ $# -gt 0 ] ;do
case $1 in
-c) config=$2;shift 2;;
-d) set -x;debug=0;shift;;
-e) email=$1;shift 2;;
-q) unset verbose ; shift;; #reduce output
-V) echo "$cmd $Revision: 1.50 $ $Date: 2017/03/05 12:09:40 $"|awk '{print $1,$3,$6}';exit;;
-s) showconfig=:;shift;;
*) echo $syntax>&2 ;exit 1;;
esac
done
lock=${lock:="/var/run/bflsync"}
if [ -f $lock ];then
echo "$cmd: lock file $lock already exists" >&2
pid=`cat $lock`
ps -ef|awk -v pid=$pid '$2 == pid'
exit 1
else
echo $$ >$lock
[ $verbose ] && echo "lock $lock set" >&2
fi
_getconfig () {
[ -r $config ] &&{
cat $config |sed -ne '/^[^#]/p' >$tmp
. $tmp
}
logdir=${logdir:="/var/log"}
opst=${opst:-21} # Off peak period start time
opet=${opet:-9} # Off peak period end time
opwt=${opwt:-45} # Off peak period wait time in minutes
pwt=${pwt:-5} # Peak period wait time in minutes
synclst=${synclst:="reports,data,datab,datac,applic,bacbin"}
synclst=`echo $synclst|sed -ne 's/,/ /gp'`
[ $showconfig ] || rm $tmp
}
_chklogfile () {
log=$logdir/bflsync-`date "+%w"`
date=`date "+%b %e"`
ls -l $log |grep -q "$date" ||{
>$log
[ $verbose ] && echo "new log $log opened" >&2
}
}
_showconfig () {
_chklogfile
echo "config file = $config"
echo "log file = $log"
echo "log file status = `ls -l $log`"
echo "tmp file = $tmp"
echo "Off peak start time = $opst"
echo "Off peak end time = $opet"
echo "Off peak wait time = $opwt"
echo "Peak wait time = $pwt"
echo "Sync list = $synclst"
cat $tmp && rm $tmp
}
_run () {
echo "\nSTART `date`" >>$log
for d in $synclst;do
case $d in
data|datab|datac|datad)
mount|grep "belpark/$d"||{
if mount -o ro belpark:/$d /belfield/$d 2>/dev/null;then
[ $verbose ] && {
echo "/belpark/$d mounted" >&2
}
else
echo "$cmd: Can't mount /belpark/$d" >&2
exit 1
fi
}
echo "rsync -az --exclude=lost+found /belpark/$d/ /bfldata/$d\c" >>$log
[ $verbose ] && {
echo "rsync -az --exclude=lost+found /belpark/$d/ /bfldata/$d\c" >&2
}
rsync -az --exclude=lost+found /belpark/$d/ /bfldata/$d
[ $? -eq 0 ] && result=completed || result=failed
time=`date +%H:%M`
echo " $result $time" >>$log
[ $verbose ] && echo "$cmd: $result $time" >&2
if umount /belpark/$d 2>/dev/null ;then
[ $verbose ] && echo "/belpark/$d unmounted" >&2
else
[ $verbose ] && echo "umount of $d failed" >&2
fi
;;
applic)
if mount -o ro belpark:/$d /belfield/$d 2>/dev/null; then
[ $verbose ] &&{
echo "/belpark/$d mounted" >&2
}
else
echo "$cmd: mount of $d failed, terminating `$date`">&2
exit 1
fi
echo "rsync -az --exclude=lost+found /belpark/$d/ /$d\c" >&2
echo "rsync -az --exclude=lost+found /belpark/$d/ /$d\c" >>$log
rsync -az --exclude=lost+found /belpark/$d/ /$d
[ $? -eq 0 ] && result=completed || result=failed
time=`date +%H:%M`
echo " $result $time" >>$log
[ $verbose ] && echo "$result $time" >&2
if umount /belpark/$d 2>/dev/null ;then
[ $verbose ] && echo "/belpark/$d unmounted"
else
[ $verbose ] && echo "umount of /belpark/$d failed">&2
fi
;;
bacbin)
if mount -o ro belpark:/usr/$d /belfield/$d 2>/dev/null; then
[ $verbose ] && echo "/belpark/$d mounted" >&2
else
echo "$cmd: mount of /belpark/$d failed - terminated `date`" >&2
exit 1
fi
echo "rsync -az --exclude=lost+found /belpark/$d/ /usr/$d\c" >>$log
[ $verbose ] && {
echo "rsync -az --exclude=lost+found /belpark/$d/ /usr/$d\c">&2
}
rsync -az --exclude=lost+found /belpark/$d/ /usr/$d
[ $? -eq 0 ] && result=completed || result=failed
time=`date +%H:%M`
echo " $result $time" >>$log
[ $verbose ] && echo " $result $time" >&2
if umount /belpark/$d 2>/dev/null;then
[ $verbose ] && echo "/belpark/$d unmounted" >&2
else
[ $verbose ] && echo "umount of /belpark/$d failed" >&2
fi
;;
reports)
if mount -o ro belpark:/usr/$d /belfield/$d 2>/dev/null; then
[ $verbose ] && echo "/belpark/$d mounted" >&2
else
echo "$cmd: mount of $d failed - terminating `date`" >&2
exit 1
fi
echo "rsync -az /belpark/$d /usr/$d\c" >>$log
[ $verbose ] && {
echo "rsync -az /belpark/$d /usr/$d\c" >&2
}
rsync -az /belpark/$d /usr/$d
[ $? -eq 0 ] && result=completed || result=failed
time=`date +%H:%M`
echo " $result $time" >>$log
[ $verbose ] && echo " $result $time" >&2
if umount /belpark/$d 2>/dev/null ;then
[ $verbose ] && echo "/belpark/$d unmounted" >&2
else
echo "$cmd: umount of /belpark/$d failed" >&2
exit 1
fi
;;
esac
[ $end ] &&{
echo "$cmd: received signal 15 - terminating"
echo "TERMINATED `date`" >>$log
rm $lock
exit 2
}
[ $reconfig ] && {
_getconfig
unset reconfig
echo "$cmd: reconfigured on SIGHUP" >&2
echo "\nReconfigured on SIGHUP `date`" >>$log
}
done
echo "FINISH `date`" >>$log
[ $verbose ] && echo "FINISH `date`" >&2
}
_getconfig
[ $debug ] && _showconfig
[ $showconfig ] &&{
_showconfig
rm $lock
exit 0
}
while :;do
_chklogfile
_run
if grep -q failed $log ;then
[ -n "$email" ] &&{
grep failed $log|
mailx -s "URGENT - bflsync failure `date`" $email
}
exit
else
hour=`date +%H`
if [ $hour -ge $opet -a $hour -le $opst ];then
waittime=$pwt
else
waittime=$opwt
fi
[ $verbose ] &&{
echo "hour = $hour">&2
echo "off peak time = $opst - $opet">&2
echo "wait = $waittime">&2
echo "$waittime minute count starting `date`" >&2
}
count=0
while [ $count -lt $waittime ];do
[ $end ] &&{
echo "$cmd received signal 15\c"
echo " - terminating"
echo "\nTERMINATED `date`" >>$log
rm $lock
exit 2
}
sleep 60
count=`expr $count + 1`
if [ $count -lt $waittime ] ;then
echo "*\c" >&2
else
echo "*" >&2
fi
done
[ $verbose ] && echo "count = $count `date`" >&2
fi
done
######################################################################
# This program is free software: you can redistribute it and or #
# modify it under the terms of the Lesser GNU General Public License #
# as published by the Free Software Foundation, either version 3 of #
# the License, or (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# A copy of the Lesser GNU General Public License and the GNU #
# General Public License is available at #
# <http://www.gnu.org/licenses/>. #
######################################################################
Copyright
© 2003-2017
Clifford W Fulford.
Fulford Consulting Ltd.
Regd. Co. 4250037 in England & Wales.
Regd. office 162, Edward Rd. Nottingham NG2 5GF, England, UK.
Related web sites: City Linux | Flare Support | West Bridgford | Fulford Portal | Joan Mary Fulford (Nottingham Writer) | Fulford Gallery | Amharic Interpreter | Arabic Interpreter | Tigrinya Interpreter
The layout and associated style sheets for this page are taken from the World Wide Web Consortium and used here under the W3C software licence.