You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Princeton/failover/rsync_xi.sh

269 lines
7.4 KiB
Bash

#!/bin/bash
#
# Creates a Full Backup of Nagios XI
# Copyright (c) 2011-2018 Nagios Enterprises, LLC. All rights reserved.
#
BASEDIR=/usr/local/nagiosxi/scripts
# FIXME
SBLOG="/usr/local/nagiosxi/var/components/scheduledbackups.log"
ts=`date +%s`
secondary=""
# Import Nagios XI and xi-sys.cfg config vars
. $BASEDIR/../var/xi-sys.cfg
eval $(php $BASEDIR/import_xiconfig.php)
###############################
# USAGE / HELP
###############################
usage () {
echo ""
echo "Use this script to backup Nagios XI."
echo ""
echo " -n | --name Set the name of the backup minus the .tar.gz"
echo " -p | --prepend Prepend a string to the .tar.gz name"
echo " -a | --append Append a string to the .tar.gz name"
echo " -d | --directory Change the directory to store the compressed backup"
echo ""
}
###############################
# ADDING LOGIC FOR NEW BACKUPS
###############################
while [ -n "$1" ]; do
case "$1" in
-s | --secondary)
secondary="$2"
;;
-h | --help)
usage
exit 0
;;
-n | --name)
fullname=$2
;;
-p | --prepend)
prepend=$2"."
;;
-a | --append)
append="."$2
;;
-d | --directory)
rootdir=$2
;;
esac
shift
done
[ -z "$secondary" ] && echo "Secondary not specified." && exit 2
# Restart nagios to forcibly update retention.dat
echo "Restart nagios to forcibly update retention.dat"
$BASEDIR/manage_services.sh restart nagios
sleep 10
if [ -z $rootdir ]; then
rootdir="/store/backups/nagiosxi"
fi
# Move to root dir to store backups
cd $rootdir
#############################
# SET THE NAME & TIME
#############################
name=$fullname
if [ -z $fullname ]; then
name=$prepend$ts$append
fi
# Get current Unix timestamp as name
if [ -z $name ]; then
name=$ts
fi
# My working directory
mydir=$rootdir/$name
# Make directory for this specific backup
mkdir -p $mydir
##############################
# BACKUP DIRS
##############################
do_rsync() {
rsync -avu --delete --delete-after $1 ${secondary}:${1}
}
# Only backup NagiosQL if it exists
if [ -d "/var/www/html/nagiosql" ]; then
echo "Backing up NagiosQL..."
do_rsync /var/www/html/nagiosql/
do_rsync /etc/nagiosql/
fi
echo "Backing up Nagios Core..."
do_rsync /usr/local/nagios
# Backup ramdisk if it exists
if [ -f "/etc/sysconfig/nagios" ]; then
echo "Copying ramdisk configuration..."
do_rsync /etc/sysconfig/nagios
fi
echo "Backing up Nagios XI..."
do_rsync /usr/local/nagiosxi/
echo "Backing up MRTG..."
do_rsync /var/lib/mrtg/
do_rsync /etc/mrtg/mrtg.cfg
do_rsync /etc/mrtg/conf.d/
# SNMP configs and MIBS
echo "Backing up the SNMP directories"
do_rsync /etc/snmp/
do_rsync /usr/share/snmp/
echo "Backing up NRDP..."
do_rsync /usr/local/nrdp/
echo "Backing up Nagvis..."
do_rsync /usr/local/nagvis/
echo "Backing up nagios user home dir..."
do_rsync /home/nagios/
##############################
# BACKUP DATABASES
##############################
echo "Backing up MySQL databases..."
mkdir -p $mydir/mysql
if [[ "$cfg__db_info__ndoutils__dbserver" == *":"* ]]; then
ndoutils_dbport=`echo "$cfg__db_info__ndoutils__dbserver" | cut -f2 -d":"`
ndoutils_dbserver=`echo "$cfg__db_info__ndoutils__dbserver" | cut -f1 -d":"`
else
ndoutils_dbport='3306'
ndoutils_dbserver="$cfg__db_info__ndoutils__dbserver"
fi
mysqldump -h "$ndoutils_dbserver" --port="$ndoutils_dbport" -u $cfg__db_info__ndoutils__user --password="$cfg__db_info__ndoutils__pwd" --add-drop-database -B $cfg__db_info__ndoutils__db > $mydir/mysql/nagios.sql
res=$?
if [ $res != 0 ]; then
echo "Error backing up MySQL database 'nagios' - check the password in this script!" | tee -a $SBLOG
rm -r $mydir
exit $res;
fi
if [[ "$cfg__db_info__nagiosql__dbserver" == *":"* ]]; then
nagiosql_dbport=`echo "$cfg__db_info__nagiosql__dbserver" | cut -f2 -d":"`
nagiosql_dbserver=`echo "$cfg__db_info__nagiosql__dbserver" | cut -f1 -d":"`
else
nagiosql_dbport='3306'
nagiosql_dbserver="$cfg__db_info__nagiosql__dbserver"
fi
mysqldump -h "$nagiosql_dbserver" --port="$nagiosql_dbport" -u $cfg__db_info__nagiosql__user --password="$cfg__db_info__nagiosql__pwd" --add-drop-database -B $cfg__db_info__nagiosql__db > $mydir/mysql/nagiosql.sql
res=$?
if [ $res != 0 ]; then
echo "Error backing up MySQL database 'nagiosql' - check the password in this script!" | tee -a $SBLOG
rm -r $mydir
exit $res;
fi
# Only backup PostgresQL if we are still using it
if [ $cfg__db_info__nagiosxi__dbtype == "pgsql" ]; then
echo "Backing up PostgresQL databases..."
mkdir -p $mydir/pgsql
if [ -z $cfg__db_info__nagiosxi__dbserver ]; then
cfg__db_info__nagiosxi__dbserver="localhost"
fi
pg_dump -h $cfg__db_info__nagiosxi__dbserver -c -U $cfg__db_info__nagiosxi__user $cfg__db_info__nagiosxi__db > $mydir/pgsql/nagiosxi.sql
res=$?
if [ $res != 0 ]; then
echo "Error backing up PostgresQL database 'nagiosxi' !" | tee -a $SBLOG
rm -r $mydir
exit $res;
fi
else
if [[ "$cfg__db_info__nagiosxi__dbserver" == *":"* ]]; then
nagiosxi_dbport=`echo "$cfg__db_info__nagiosxi__dbserver" | cut -f2 -d":"`
nagiosxi_dbserver=`echo "$cfg__db_info__nagiosxi__dbserver" | cut -f1 -d":"`
else
nagiosxi_dbport='3306'
nagiosxi_dbserver="$cfg__db_info__nagiosxi__dbserver"
fi
mysqldump -h "$nagiosxi_dbserver" --port="$nagiosxi_dbport" -u $cfg__db_info__nagiosxi__user --password="$cfg__db_info__nagiosxi__pwd" --add-drop-database -B $cfg__db_info__nagiosxi__db > $mydir/mysql/nagiosxi.sql
res=$?
if [ $res != 0 ]; then
echo "Error backing up MySQL database 'nagiosxi' - check the password in this script!" | tee -a $SBLOG
rm -r $mydir
exit $res;
fi
fi
##############################
# BACKUP CRONJOB ENTRIES
##############################
echo "Backing up cronjobs for Apache..."
if [[ "$distro" == "Ubuntu" ]] || [[ "$distro" == "Debian" ]]; then
do_rsync /var/spool/cron/crontabs/$apacheuser
else
do_rsync /var/spool/cron/apache
fi
##############################
# BACKUP SUDOERS
##############################
# Not necessary
##############################
# BACKUP LOGROTATE
##############################
echo "Backing up logrotate config files..."
do_rsync /etc/logrotate.d/nagiosxi
##############################
# BACKUP APACHE CONFIG FILES
##############################
echo "Backing up Apache config files..."
do_rsync $httpdconfdir/nagios.conf
do_rsync $httpdconfdir/nagiosxi.conf
do_rsync $httpdconfdir/nagiosmobile.conf
do_rsync $httpdconfdir/nagvis.conf
do_rsync $httpdconfdir/nrdp.conf
if [ -d "/etc/apache2/sites-available" ]; then
do_rsync /etc/apache2/sites-available/default-ssl.conf
else
do_rsync $httpdconfdir/ssl.conf
fi
##############################
# COMPRESS BACKUP
##############################
echo "Compressing backup..."
tar czfp $name.tar.gz $name
rm -rf $name
# Change ownership
chown $nagiosuser:$nagiosgroup $name.tar.gz
if [ -s $name.tar.gz ];then
echo " "
echo "==============="
echo "BACKUP COMPLETE"
echo "==============="
echo "Backup stored in $rootdir/$name.tar.gz"
else
echo " "
echo "==============="
echo "BACKUP FAILED"
echo "==============="
echo "File was not created at $rootdir/$name.tar.gz"
rm -r $mydir
exit 1;
fi
do_rsync $rootdir/$name.tar.gz