From a0c5e1ca1abe83b0d7f6ea52b689628ad083949c Mon Sep 17 00:00:00 2001
From: Per Cederqvist <ceder@lysator.liu.se>
Date: Tue, 7 Aug 2007 19:16:31 +0000
Subject: [PATCH] Added support for starting the backups at a predefined time.

* backup-repeatedly: New option: --start-time, that specifies the hour
  and minute when the backup should start.
---
 ChangeLog         |  4 ++++
 backup-repeatedly | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 50 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index 8340288..95b6326 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2007-08-07  Per Cederqvist  <ceder@ryttargardskyrkan.se>
 
+	Added support for starting the backups at a predefined time.
+	* backup-repeatedly: New option: --start-time, that specifies the
+	hour and minute when the backup should start.
+
 	Added fetch-work-pcfritz.
 	* fetch-work-pcfritz: New file, for the installation at
 	Ryttargårdskyrkan.
diff --git a/backup-repeatedly b/backup-repeatedly
index 2f2bb1f..0d6d7af 100755
--- a/backup-repeatedly
+++ b/backup-repeatedly
@@ -1,7 +1,53 @@
 #!/bin/sh
 ctr=0
+starttime=
+
+LASTSTART=/opt/LYSrdiff/var/last-start
+
+case $1 in
+    --start-time)
+        shift
+	case $1 in
+	    [0-9][0-9]:[0-9][0-9])
+                start_h=`echo $1|sed 's/:.*//'`
+		start_m=`echo $1|sed 's/.*://'`
+		starttime=`expr 3600 '*' $start_h + 60 '*' $start_m`
+		shift
+		;;
+	    *)
+	        echo bad time >&2
+		exit 1
+		;;
+	esac
+esac
+	    
 while :
 do
+  if [ -n "$starttime" ]
+  then
+      if [ -z "`find $LASTSTART -ctime +0 -print 2>/dev/null`" ]
+      then
+	  now=`date +%H:%M:%S`
+	  h=`echo $now|sed 's/:.*//'`
+	  m=`echo $now|sed 's/[^:]*://'|sed 's/:.*//'`
+	  s=`echo $now|sed 's/.*://'`
+	  delta=`expr $starttime - '(' 3600 '*' $h + 60 '*' $m + $s ')'`
+	  day=`expr 24 '*' 3600`
+	  to_wait=`expr '(' $delta + $day ')' % $day`
+	  if [ $to_wait -lt `expr $day - 60` ] && [ $to_wait -gt 1 ]
+	  then
+	      echo Sleeping for $to_wait seconds until $start_h:$start_m
+	      sleep $to_wait
+	  else
+	      echo Not sleeping $to_wait seconds
+	  fi
+      else
+	  echo Not sleeping since previous run took too long
+      fi
+  else
+      echo 'Not sleeping: no --start-time specified'
+  fi
+
   ctr=`expr $ctr + 1`
   [ -f /opt/LYSrdiff/etc/finish ] && break
   [ -f /opt/LYSrdiff/etc/stop ] && break
-- 
GitLab