| #!/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})" |