From: Alan J. Pippin Date: Fri, 22 Aug 2008 05:45:36 +0000 (-0600) Subject: Added safegaurds to prevent script from running on top of itself X-Git-Url: http://git.pippins.net/embedvideo/.git/%27%20%20%20%20.%20%24GLOBALS%5B%27phpgw%27%5D-%3Elink%28%27inc/jquery/checkmark.gif?a=commitdiff_plain;h=e52d277a87f755e063e35a74fbc2a94de84a4462;p=zfs-ubuntu%2F.git Added safegaurds to prevent script from running on top of itself --- diff --git a/zfs-autosnap-wrapper b/zfs-autosnap-wrapper index ad8f4fc..813d9fe 100755 --- a/zfs-autosnap-wrapper +++ b/zfs-autosnap-wrapper @@ -7,8 +7,16 @@ # Setup some default values autosnap="/usr/local/etc/bin/zfs-autosnap" logfile="/var/log/zfs/zfs-autosnap.log" +lockdir="/tmp/zfs-autosnap-all" numsnapshots=20 maxagedays=365 +date=`date` + +# Make sure we aren't already running +if ! mkdir "$lockdir" >/dev/null 2>&1; then + echo "$date Another $0 process is already running" >> $logfile + exit 1 +fi # Auto snapshot every zfs filesystem on the system specified below date >> $logfile @@ -27,7 +35,14 @@ $autosnap tank/usr/local/etc /usr/local/etc $numsnapshots $maxagedays # Daily filesystems (only perform these at midnight) if [ `date +"%H:%M"` == "00:00" ]; then - $autosnap tank/var /var $numsnapshots $maxagedays - $autosnap tank/usr/local/var /usr/local/var $numsnapshots $maxagedays + echo "Performing Daily snapshots" >> $logfile +fi + +# Weekly filesystems (only perform these on Sunday at midnight) +if [ `date +"%H:%M:%u"` == "00:00:7" ]; then + echo "Performing Weekly snapshots" >> $logfile + $autosnap tank/var /var $numsnapshots 60 + $autosnap tank/usr/local/var /usr/local/var $numsnapshots 60 fi +rm -rf "$lockdir" diff --git a/zfs-replicate-wrapper b/zfs-replicate-wrapper index faeaeb0..b52e64e 100755 --- a/zfs-replicate-wrapper +++ b/zfs-replicate-wrapper @@ -9,41 +9,51 @@ replicate="/usr/local/etc/bin/zfs-replicate" logfile_parser="/usr/local/etc/bin/zfs-log-parser" logfile="/var/log/zfs/zfs-replicate.log" lockdir="/tmp/zfs-admin-lock" +mailto=root destpool="backups" maxsleeptime=60 +maxattempts=600 released_lock_date=0 +date=`date` # Setup our cleanup and exit trap cleanup() { rm -rf "$lockdir" if [ $released_lock_date == 0 ]; then + zpool export $destpool + /usr/local/etc/bin/usb-drive-power off echo `date` ZFS admin lock released >> $logfile fi } trap cleanup EXIT # Auto snapshot every zfs filesystem on the system specified below -date=`date`; echo "$date Polling for ZFS admin lock" >> $logfile # Poll for a lock on the zfs subsystem, and make the lock once we can do so +attempts=0 while true; do if ! mkdir "$lockdir" >/dev/null 2>&1; then # Another zfs admin tool is running. # Wait a random amount of time and try again ransleep=$(($RANDOM % $maxsleeptime)) sleep $ransleep + ((attempts=attempts+1)) else # No other zfs admin tool is running, we can now. break fi + if [[ $attempts -gt $maxattempts ]]; then + # We've exceeded our maximum while loop count + ls -ld $lockdir | /usr/bin/mailx -s "zfs-replicate-all unable to obtain zfs admin lock" $mailto + exit 1 + fi done date=`date`; echo "$date ZFS admin lock obtained" >> $logfile # Poweron the destpool and import it -/usr/local/bin/br -x /dev/ttyd0 A3 ON -sleep 10 +/usr/local/etc/bin/usb-drive-power on >> $logfile zpool import $destpool # List the filesystems to replicate @@ -62,7 +72,7 @@ $replicate tank/backup $destpool # Export the destpool and power it down zpool export $destpool -/usr/local/bin/br -x /dev/ttyd0 A3 OFF +/usr/local/etc/bin/usb-drive-power off >> $logfile # Release our lock released_lock_date=1 @@ -70,3 +80,4 @@ echo `date` ZFS admin lock released >> $logfile # Parse the log file and extract our backup stats $logfile_parser "$logfile" "$date" >> $logfile +