-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheck_rsnapshot
131 lines (111 loc) · 3 KB
/
check_rsnapshot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/bash
# Version 1.0
# ok= 0, Warning = 1, Critical = 2 unknown = 3
HOST="$1"
SNAPDIR="/srv/rsnapshot/$HOST"
BACKTEST="daily.0"
CONFFILE="/etc/rsnapshot.d/$HOST.conf"
LOGFILE="/var/log/rsnapshot/$HOST.log"
PID="/var/run/rsnapshot/rsnapshot-$HOST.pid"
STATUS="3"
CONF_CHECK=0
CONF_TXT=""
DIR_CHECK=0
DIR_TXT=""
ROTATE_CHECK=0
ROTATE_TXT=""
DEBUG=1
LOGERR=""
LOGWARN=""
if [ "$HOST" = "" ]; then
echo "ERROR: Command needs a host passed to it"
exit 2
fi
date2stamp() {
date --utc --date "$1" +%s
}
stamp2date() {
date --utc --date "1970-01-01 $1 sec" "+%Y-%m-%d %T"
}
dateDiff() {
case $1 in
-s) sec=1; shift;;
-m) sec=60; shift;;
-h) sec=3600; shift;;
-d) sec=86400; shift;;
*) sec=86400;;
esac
dte1=$(date2stamp $1)
dte2=$(date2stamp $2)
diffSec=$((dte2-dte1))
if ((diffSec < 0)); then abs=3; else abs=1; fi
echo $((diffSec/sec*abs))
}
if [ -f $SNAPDIR/$BACKTEST ]; then FILEDATE=`date -r $SNAPDIR/$BACKTEST +%F`; fi
# Function
function check_dir {
if [ ! -d "$SNAPDIR" ]; then
DIR_CHECK=1
DIR_TXT="$SNAPDIR is missing"
fi
}
function check_conf {
if [ ! -f /var/run/rsnapshot.pid ]; then
TEST=`rsnapshot -c $CONFFILE -t daily 2>&1 | grep "ERROR"`
if [ "$TEST" != "" ]; then
CONF_TXT=$TEST
CONF_CHECK=1
fi
fi
}
function check_rotation {
TIMEDIFF=$(dateDiff -d $FILEDATE $date)
if [ "$TIMEDIFF" -gt "1" ]; then
ROTATE_CHECK=1
ROTATE_TXT="Backup was not rotated in the last 24 hours. Date on $BACKTEST is $FILEDATE"
fi
}
function check_log {
if [ -f $LOGFILE ]; then
LOGDATA="$(egrep ^\\[`date +%d/%b/%Y` $LOGFILE)"
LOGERR="$(echo "$LOGDATA" | egrep -i 'error:')"
LOGWARN="$(echo "$LOGDATA" | egrep -i 'warning:'| egrep -v 'but with some warnings')"
else
LOGERR="ERROR: Missing log File"
fi
}
RETSTR=""
RETVAL=0
error_to() {
if [ "$1" -gt "$RETVAL" ]; then
RETVAL="$1"
fi
RETSTR="$RETSTR
$2"
}
function finisher {
if [ "$CONF_CHECK" -gt "0" ]; then
if [ $DEBUG ]; then echo Check Conf; fi
error_to 2 "ERROR: The conf file has errors. $CONF_TXT"
fi
if [ "${#LOGERR}" -gt "0" ]; then
error_to 2 "$LOGERR"
fi
if [ "${#LOGWARN}" -gt "0" ]; then
error_to 1 "$LOGWARN"
fi
if [ "$ROTATE_CHECK" -gt "0" ]; then
if [ $DEBUG ]; then echo Check Rotate; fi
error_to 2 "$ROTATE_TXT"
fi
if [ "$RETSTR" == "" ]; then
RETSTR="OK - No errors reported"
fi
echo $RETSTR
exit $RETVAL
}
check_dir
check_conf
check_rotation
check_log
finisher