forked from gentoo/gentoo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
drac_rotate
99 lines (86 loc) · 2.48 KB
/
drac_rotate
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
#!/bin/bash
usage="[/path/to/real_file.db [/path/to/link_file.db]] [--debug] [--verbose]"
help="
A DRAC-enabled MTA performs better by using a seldomly, instead of
constantly changing, access database. This script creates a link
to a snapshotted database which the MTA can use. It is designed
to run every minute from cron. Here is an example cron configuration:
* * * * * $(basename "$0")
"
for i in $* ; do
case "${i}" in
--verbose | -verbose | -v | --debug | -debug | -d)
debug=1
;;
--usage | -usage | -u )
echo "usage: $(basename "$0") ${usage}"
exit 1
;;
--help | -help | -h)
echo "${help}"
echo "usage: $(basename "$0") ${usage}"
echo
exit 1
;;
*)
args[${#args}]="${i}"
;;
esac
done
debug_print() {
if [ -n "${debug}" ] ; then
if [ -n "$2" ] ; then
echo -n "$1 ... "
else
echo "$1"
fi
fi
}
check_result() {
if [ "$?" -ne 0 ] ; then
debug_print
if [ -n "$1" ] ; then
echo "$(basename "$0"): $1, exiting ..."
else
echo "$(basename "$0"): exiting ..."
fi
exit 1
fi
}
debug_print "finding current minute" "1"
min="$(date '+%-M')" && \
[ -n "${min}" ]
check_result "can't determine current minute"
debug_print "success! (${min})"
debug_print "finding drac database file" "1"
real="${args[0]:-/var/lib/drac/drac.db}" && \
[ -n "${real}" -a -f "${real}" ]
check_result "can't find drac database file"
debug_print "success! (${real})"
debug_print "setting drac link file" "1"
link="${args[1]:-/var/lib/drac/drac_link.db}" && \
[ -n "${link}" -a -d "$(dirname "${link}")" ]
check_result "can't set drac link file"
debug_print "success! (${link})"
debug_print "finding new drac database" "1"
new="${real}$(( ${min} % 3 ))" && \
[ "${new}" != "${real}" ]
check_result "can't set new drac database"
debug_print "success! (${new})"
debug_print "finding old drac database" "1"
old="${real}$(( (${min} + 1) % 3 ))" && \
[ "${old}" != "${real}" -a "${old}" != "${new}" ]
check_result "can't set old drac database"
debug_print "success! (${old})"
debug_print "creating new drac database" "1"
cp "${real}" "${new}"
check_result "can't create new drac database"
debug_print "success! ($(basename "${real}") -> $(basename "${new}"))"
debug_print "linking new drac database" "1"
ln -sf "${new}" "${link}"
check_result "can't link new drac database"
debug_print "success! ($(basename "${new}") -> $(basename "${link}"))"
debug_print "removing old drac database" "1"
rm -f "${old}"
check_result "can't remove old drac database"
debug_print "success! (${old})"