blob: 45cce3a4dc4d16cb03593274355ce276cedc26f5 [file] [log] [blame]
#!/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})"