Browse code

Ignore exit code 1 of tar during directory backup which only indicates file changes during runtime

Benjamin Roth authored on19/01/2018 21:50:53
Showing1 changed files
... ...
@@ -1,4 +1,14 @@
1 1
 #!/bin/bash
2
+
3
+
4
+#+++++++++++++++++++++++++++++++++++++++++++++++++++
5
+# eSales Media Backup Script
6
+#
7
+# Author: Benjamin Roth
8
+# Version: 18.0.3
9
+#+++++++++++++++++++++++++++++++++++++++++++++++++++
10
+
11
+
2 12
 if [ ! $1 -a $2 -a $3 ]
3 13
 then
4 14
 	echo "Wrong parameter count."
Browse code

Initial commit

Benjamin Roth authored on16/06/2016 16:11:29
Showing1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,149 @@
1
+#!/bin/bash
2
+if [ ! $1 -a $2 -a $3 ]
3
+then
4
+	echo "Wrong parameter count."
5
+	exit 1
6
+fi
7
+
8
+#####################
9
+#     PARAMETER     #
10
+#####################
11
+TARGETDIR=$2
12
+SERVER=`echo $1 | awk -F:: '{ print $2 }'`
13
+USER=`echo $1 | awk -F:: '{ print $3 }' | awk -F: '{ print $1 }'`
14
+PASSWD=`echo $1 | awk -F:: '{ print $3 }' | awk -F: '{ print $2 }'`
15
+WEEKLYDOW=`echo $1 | awk -F:: '{ print $4 }'`
16
+JOBNAME=$3
17
+
18
+##########################
19
+#     PREREQUISITIES     #
20
+##########################
21
+
22
+# REMOTE DIR STRUCTURE
23
+REMOTETREE=$(mktemp)
24
+ftp -pn $SERVER <<END_OF_SESSION
25
+quote USER $USER
26
+quote PASS $PASSWD
27
+ls -R $REMOTETREE
28
+bye
29
+END_OF_SESSION
30
+
31
+grep ":$" $REMOTETREE | cut -d: -f1 | uniq | sort -o $REMOTETREE
32
+
33
+# REQUIRED STRUCTURE
34
+REQTREE=$(mktemp)
35
+echo "weekly" >  $REQTREE
36
+echo "daily" >>  $REQTREE
37
+
38
+cat $REQTREE | cut -d: -f1 | uniq | sort -o $REQTREE
39
+
40
+# compare local and remote, list missing remote directories
41
+MISSINGDIR=$(mktemp)
42
+for ITEM in $(diff $REMOTETREE $REQTREE | grep "^>" | cut -d\> -f2 ) ; do
43
+	echo "$ITEM" >> $MISSINGDIR
44
+done
45
+
46
+# remove blank lines and lines where mkdir has no argument and clean up manually
47
+sed -i '/^$/d' $MISSINGDIR
48
+sed -i '/^mkdir$/d' $MISSINGDIR
49
+echo "/" >> $MISSINGDIR		#harmless 'directory exists" to avoid empty file
50
+
51
+# create missing directories
52
+for ITEM in $(cat $MISSINGDIR); do
53
+	ftp -pn $SERVER <<END_OF_SESSION
54
+	user $USER $PASSWD
55
+	cd /
56
+	mkdir $ITEM
57
+	bye
58
+END_OF_SESSION
59
+done
60
+
61
+#####################
62
+#     FUNCTIONS     #
63
+#####################
64
+
65
+function upload() {
66
+	if [ ! $1 -a $2 ]
67
+	then
68
+		echo "Wrong parameter count."
69
+		exit 1
70
+	fi
71
+	files=$1
72
+	dir=$2
73
+
74
+	## upload the files
75
+	for ITEM in $(cat $files); do
76
+		FILE=$(basename $ITEM)
77
+		LOCALDIR=$(dirname $ITEM)
78
+		REMOTEDIR=/${dir}/
79
+
80
+		## ftp starts here
81
+		ftp -pn $SERVER <<END_OF_SESSION
82
+		user $USER $PASSWD
83
+		binary
84
+		lcd $LOCALDIR
85
+		cd $REMOTEDIR
86
+		put $FILE ._$FILE.part
87
+		rename ._$FILE.part $FILE
88
+		bye
89
+END_OF_SESSION
90
+	done
91
+}
92
+
93
+##############################
94
+#     FETCH BACKUP FILES     #
95
+##############################
96
+if [ -d $TARGETDIR ]
97
+then
98
+	# Check for existing backup files
99
+	COUNT=`find $TARGETDIR -maxdepth 1 -type f -regex ".*/${JOBNAME//\./\\.}_[0-9]*\(_?[0-9]*\)\..*" | wc -l`
100
+	
101
+	if [ "$COUNT" -gt 0 ]
102
+	then
103
+		MD5FILES=$(mktemp)
104
+
105
+		UPLOADWEEKLY=$(mktemp)
106
+		UPLOADDAILY=$(mktemp)
107
+
108
+		find $TARGETDIR -maxdepth 1 -type f -regex ".*/${JOBNAME//\./\\.}_[0-9]*\(_?[0-9]*\)\.sql" -printf '%T@ %p\n' | sort -k 1n | sed 's/^[^ ]* //' | tail -n 1 |
109
+		while read LINE
110
+		do
111
+			if [ -f $LINE ]
112
+			then
113
+				echo $LINE >> $UPLOADWEEKLY
114
+				echo $LINE >> $UPLOADDAILY
115
+				md5sum $LINE | awk '{print $1}' > ${LINE}.md5
116
+				echo ${LINE}.md5 >> $MD5FILES
117
+			fi
118
+		done
119
+		
120
+		
121
+		find $TARGETDIR -maxdepth 1 -type f -regex ".*/${JOBNAME//\./\\.}_[0-9]*\(_?[0-9]*\)\.tgz" -printf '%T@ %p\n' | sort -k 1n | sed 's/^[^ ]* //' | tail -n 1 |
122
+		while read LINE
123
+		do
124
+			if [ -f $LINE ]
125
+			then
126
+				echo $LINE >> $UPLOADWEEKLY
127
+				echo $LINE >> $UPLOADDAILY
128
+				md5sum $LINE | awk '{print $1}' > ${LINE}.md5
129
+				echo ${LINE}.md5 >> $MD5FILES
130
+			fi
131
+		done
132
+		
133
+		upload $UPLOADDAILY daily
134
+		upload $MD5FILES daily
135
+
136
+		if [ `date "+%u"` -eq $WEEKLYDOW ] || [ `date "+%w"` -eq $WEEKLYDOW ]
137
+		then
138
+			upload $UPLOADWEEKLY weekly
139
+			upload $MD5FILES weekly
140
+		fi
141
+
142
+
143
+		for ITEM in $(cat $MD5FILES); do
144
+			rm $ITEM
145
+		done
146
+	fi
147
+fi
148
+
149
+exit 0