Browse code

Prevent runtime file changes by using rsync directory copy if available

Benjamin Roth authored on19/01/2018 21:12:10
Showing2 changed files
... ...
@@ -40,7 +40,7 @@ function run() {
40 40
 	then
41 41
 		echo "Analyzing job $val..."
42 42
 		cat ${CONFIGPATH}${val} |
43
-		while read LINE
43
+		while IFS=$'\r\n' read LINE
44 44
 		do
45 45
 			if [ "$LINE" = "" ]
46 46
 			then
... ...
@@ -15,6 +15,7 @@ SRCPARENT=`dirname "${SRCPATH}"`
15 15
 EXCLUDES=`echo $1 | awk -F:: '{ print $3 }'`
16 16
 TSTAMP=`date +%Y%m%d`
17 17
 JOBNAME=$3
18
+RSYNCEXEC=`type -p "rsync"`
18 19
 
19 20
 
20 21
 ###################
... ...
@@ -30,10 +31,33 @@ then
30 31
 		do 
31 32
 			suffix=`expr $suffix + 1`
32 33
 		done
33
-		BACKUPFILE="${TARGETDIR}${JOBNAME}_${TSTAMP}_${suffix}.tgz"
34
+		BACKUPNAME="${JOBNAME}_${TSTAMP}_${suffix}"
34 35
 	else
35
-		BACKUPFILE="${TARGETDIR}${JOBNAME}_${TSTAMP}.tgz"
36
+		BACKUPNAME="${JOBNAME}_${TSTAMP}"
36 37
 	fi
38
+		BACKUPFILE="${TARGETDIR}${BACKUPNAME}.tgz"
39
+	# Make a temporary copy if rsync is available
40
+	if [ -n $RSYNCEXEC ]
41
+	then
42
+	  RSYNCTMPDIR="tmp.`cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32`"
43
+    if [ -d "${TARGETDIR}${RSYNCTMPDIR}" ]
44
+    then
45
+      suffix=2
46
+      while [ -d "${TARGETDIR}${RSYNCTMPDIR}_${suffix}" ]
47
+      do
48
+        suffix=`expr $suffix + 1`
49
+      done
50
+      RSYNCDIR="${TARGETDIR}${RSYNCTMPDIR}_${suffix}"
51
+    else
52
+      RSYNCDIR="${TARGETDIR}${RSYNCTMPDIR}"
53
+    fi
54
+    $RSYNCEXEC -a $SRCPATH $RSYNCDIR
55
+    if [ $? -eq 0 ]
56
+    then
57
+      SRCPARENT=$RSYNCDIR
58
+    fi
59
+  fi
60
+  # Begin tar backup
37 61
 	tar -czf ${BACKUPFILE} --ignore-failed-read --warning=file-changed --directory ${SRCPARENT} ${SRCDIR} &> /dev/null 2> ${BACKUPFILE}.err
38 62
 	if [ $? -eq 0 ]
39 63
 	then
... ...
@@ -42,6 +66,10 @@ then
42 66
 		then
43 67
 			rm ${BACKUPFILE}.err &> /dev/null
44 68
 		fi
69
+  	if [ -n $RSYNCEXEC -a -d $RSYNCDIR ]
70
+  	then
71
+   	  rm -rf $RSYNCDIR &> /dev/null
72
+  	fi
45 73
 		exit 0
46 74
 	else
47 75
 		cat ${BACKUPFILE}.err
... ...
@@ -53,6 +81,10 @@ then
53 81
 		then
54 82
 			rm ${BACKUPFILE}.err &> /dev/null
55 83
 		fi
84
+		if [ -n $RSYNCEXEC -a -d $RSYNCDIR ]
85
+  	then
86
+  	  rm -rf $RSYNCDIR &> /dev/null
87
+  	fi
56 88
 		exit 1
57 89
 	fi
58 90
 else