SNMPtraps
This commit is contained in:
parent
8c5a6358b6
commit
3b02d0bfd6
7
debian/changelog
vendored
7
debian/changelog
vendored
@ -1,3 +1,10 @@
|
||||
remote-backup (1.6.0) stable; urgency=low
|
||||
|
||||
* lock targets individually, skip if stored pid matches a running instance
|
||||
* SNMP traps
|
||||
|
||||
-- Vincent Riquer <v.riquer@b2f-concept.com> Fri, 16 Mar 2012 12:15:45 +0100
|
||||
|
||||
remote-backup (1.5.3) stable; urgency=low
|
||||
|
||||
* Use rsync --fake-super when running as user
|
||||
|
||||
@ -10,4 +10,10 @@ TIMEOUT=1800
|
||||
RETRY=5
|
||||
RETRY_DELAY=60
|
||||
|
||||
#generate output
|
||||
EMAIL=1
|
||||
#SNMP Traps
|
||||
SNMPDEST=holay.b2f-concept.net
|
||||
SNMPCOMM=b2f
|
||||
|
||||
ADDITIONAL_RSYNC_OPTS=""
|
||||
|
||||
147
remote-backup
147
remote-backup
@ -66,34 +66,37 @@ do
|
||||
esac
|
||||
done
|
||||
|
||||
declare -a failedBackups
|
||||
declare -A failedWith
|
||||
declare -a backupIndex
|
||||
declare -a backupStatus
|
||||
declare -a backupStatusInfo
|
||||
declare -a snmpTrapContent
|
||||
RETRY=5
|
||||
RETRY_DELAY=60
|
||||
|
||||
failRsync() {
|
||||
nameFailed="$1"
|
||||
code=$2
|
||||
path="$3"
|
||||
failedBackups+=( "$nameFailed" )
|
||||
if [ -d "$3" ]
|
||||
code=$1
|
||||
path="$2"
|
||||
if [ -d "$2" ]
|
||||
then
|
||||
touch "$3/unfinished.remote-backup"
|
||||
failedWith["$nameFailed"]="RSYNC_PARTIAL $code"
|
||||
touch "$2/unfinished.remote-backup"
|
||||
backupStatus+=( 2 )
|
||||
backupStatusInfo+=( "rsync errno: $code" )
|
||||
else
|
||||
failedWith["$nameFailed"]="RSYNC_FAILED $code"
|
||||
backupStatus+=( 1 )
|
||||
backupStatusInfo+=( "rsync_errno: $code" )
|
||||
fi
|
||||
}
|
||||
|
||||
openLog() {
|
||||
exec 3>&1
|
||||
exec 4>&2
|
||||
exec 1>> /var/log/remote-backup
|
||||
exec 2>&1
|
||||
}
|
||||
|
||||
closeLog() {
|
||||
exec 1>&3
|
||||
exec 2>&3
|
||||
exec 2>&4
|
||||
}
|
||||
|
||||
doBackup() {
|
||||
@ -101,23 +104,24 @@ doBackup() {
|
||||
if [ ! -e "$config" ]
|
||||
then
|
||||
echo "No backups defined, dying." >&2
|
||||
echo "No backups defined, dying." >&3
|
||||
echo "No backups defined, dying." >&4
|
||||
exit 128
|
||||
fi
|
||||
source /etc/remote-backup/defaults.conf
|
||||
source "$config"
|
||||
|
||||
backupIndex+=( "$NAME" )
|
||||
echo "Debut de backup de ${REMOTE_LOCATION} vers ${SNAPSHOT_RW}/${NAME}/ a $(date +"%H:%M, le %d/%m/%Y")"
|
||||
|
||||
if [[ "$REMOUNT" == "true" ]]
|
||||
then
|
||||
# attempt to remount the RW mount point as RW; else abort
|
||||
$MOUNT -o remount,rw "$MOUNT_DEVICE" "$SNAPSHOT_RW" ;
|
||||
mountMsg="$( $MOUNT -o remount,rw "$MOUNT_DEVICE" "$SNAPSHOT_RW" 2>&1 )" ;
|
||||
if (( $? ))
|
||||
then
|
||||
echo "snapshot: could not remount $SNAPSHOT_RW readwrite" >&2
|
||||
failedBackups+=( "$NAME" )
|
||||
failedReason["$NAME"]="REMOUNT_RW $MOUNT_DEVICE"
|
||||
backupStatus+=( 4 )
|
||||
backupStatusInfo+=( "$MOUNT_DEVICE: $mountMsg" )
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
@ -132,11 +136,20 @@ doBackup() {
|
||||
runBackup emerg.$(date +%Y%m%d%H%M)
|
||||
else
|
||||
if [ -f "$SNAPSHOT_RW/$NAME/.lock" ] \
|
||||
&& [ -r /proc/$(<"$SNAPSHOT_RW/$NAME/.lock")/comm ] \
|
||||
&& [[ $(</proc/$(<"$SNAPSHOT_RW/$NAME/.lock")/comm) = remote-backup ]]
|
||||
&& [ -r /proc/$(<"$SNAPSHOT_RW/$NAME/.lock")/cmdline ]
|
||||
then
|
||||
failedBackups+=( "$NAME" )
|
||||
failedReason["$NAME"]=LOCKED
|
||||
progname=$(</proc/$(<"$snapshot_rw/$name/.lock")/cmdline)
|
||||
progname=${progname##*/}
|
||||
if [[ $progname = remote-backup ]]
|
||||
then
|
||||
backupStatus+=( 5 )
|
||||
backupStatusInfo+=( "Process $(<"$SNAPSHOT_RW/$NAME/.lock") still running" )
|
||||
else
|
||||
echo $$ > "$SNAPSHOT_RW/$NAME/.lock"
|
||||
rotateBackup
|
||||
runBackup daily.0
|
||||
rm "$SNAPSHOT_RW/$NAME/.lock"
|
||||
fi
|
||||
else
|
||||
echo $$ > "$SNAPSHOT_RW/$NAME/.lock"
|
||||
rotateBackup
|
||||
@ -240,6 +253,7 @@ runBackup() {
|
||||
returncode=$?
|
||||
case $returncode in
|
||||
0)
|
||||
backupStatus+=( 0 )
|
||||
break
|
||||
;;
|
||||
2)
|
||||
@ -273,7 +287,7 @@ runBackup() {
|
||||
2)
|
||||
if (( proto29 ))
|
||||
then
|
||||
fail "$NAME" PROTO_MISMATCH
|
||||
failRsync PROTO_MISMATCH
|
||||
else
|
||||
cat <<-EOF
|
||||
|
||||
@ -284,7 +298,7 @@ runBackup() {
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
failRsync "$NAME" $returncode "$SNAPSHOT_RW/$NAME/$1"
|
||||
failRsync $returncode "$SNAPSHOT_RW/$NAME/$1"
|
||||
;;
|
||||
esac
|
||||
|
||||
@ -295,6 +309,54 @@ runBackup() {
|
||||
unset proto29
|
||||
}
|
||||
|
||||
mailStatus() {
|
||||
backup=$1
|
||||
if (( backupStatus[$backup] != 0 ))
|
||||
then
|
||||
echo -n "${backupIndex[$backup]} failed: "
|
||||
case ${backupStatus[$backup]} in
|
||||
1) #RSYNC_FAILED
|
||||
echo "No files transferred - ${backupStatusInfo[$backup]}"
|
||||
;;
|
||||
2) #RSYNC_PARTIAL
|
||||
echo "Partial transfer, will *NOT* get rotated - ${backupStatusInfo[$backup]}"
|
||||
;;
|
||||
3) #PROTO_MISMATCH
|
||||
echo "No files transferred - Protocol mismatch - Upgrade rsync daemon"
|
||||
;;
|
||||
4) #REMOUNT_RW
|
||||
echo "${backupStatusInfo[$backup]}"
|
||||
;;
|
||||
5) #LOCKED
|
||||
echo "Previous backup still running."
|
||||
;;
|
||||
*) #OTHER
|
||||
echo "$info $moreinfo"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
snmpStatus() {
|
||||
# Id. 1.3.6.1.4.1.39402.1.1.2.1
|
||||
# Name 1.3.6.1.4.1.39402.1.1.2.2
|
||||
# Status 1.3.6.1.4.1.39402.1.1.2.3.1
|
||||
# Stat. Inf. 1.3.6.1.4.1.39402.1.1.2.3.2
|
||||
backup=$1
|
||||
snmpTrapContent+=( "1.3.6.1.4.1.39402.1.1.2.1.$backup" )
|
||||
snmpTrapContent+=( "i" )
|
||||
snmpTrapContent+=( "$backup" )
|
||||
snmpTrapContent+=( "1.3.6.1.4.1.39402.1.1.2.2.$backup" )
|
||||
snmpTrapContent+=( "s" )
|
||||
snmpTrapContent+=( "${backupIndex[$backup]}" )
|
||||
snmpTrapContent+=( "1.3.6.1.4.1.39402.1.1.2.3.1.$backup" )
|
||||
snmpTrapContent+=( "i" )
|
||||
snmpTrapContent+=( "${backupStatus[$backup]}" )
|
||||
snmpTrapContent+=( "1.3.6.1.4.1.39402.1.1.2.3.2.$backup" )
|
||||
snmpTrapContent+=( "s" )
|
||||
snmpTrapContent+=( "${backupStatusInfo[$backup]}" )
|
||||
}
|
||||
|
||||
openLog
|
||||
|
||||
if [ -n "$EMERG" ]
|
||||
@ -309,35 +371,30 @@ fi
|
||||
|
||||
closeLog
|
||||
|
||||
if (( ${#failedBackups} ))
|
||||
if (( EMAIL ))
|
||||
then
|
||||
for backup in ${backupStatus[@]}
|
||||
do
|
||||
if (( $backup ))
|
||||
then
|
||||
cat <<-EOF
|
||||
Some backups exited non-zero.
|
||||
See the logfile for more detail.
|
||||
|
||||
EOF
|
||||
for backup in ${failedBackups[@]}
|
||||
do
|
||||
echo -n "$backup failed: "
|
||||
read info more_info <<< "${failedWith["$backup"]}"
|
||||
case $info in
|
||||
RSYNC_PARTIAL)
|
||||
echo "Partial transfer, will *NOT* get rotated - rsync returned $more_info."
|
||||
;;
|
||||
RSYNC_FAILED)
|
||||
echo "No files transferred - rsync returned $more_info."
|
||||
;;
|
||||
PROTO_MISMATCH)
|
||||
echo "No files transferred - Protocol mismatch - Upgrade rsync daemon"
|
||||
;;
|
||||
REMOUNT_RW)
|
||||
echo "Target device $more_info could not be mounted ReadWrite."
|
||||
;;
|
||||
LOCKED)
|
||||
echo "Previous backup still running."
|
||||
*)
|
||||
echo "$info $moreinfo"
|
||||
;;
|
||||
esac
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
for backup in ${!backupIndex[@]}
|
||||
do
|
||||
(( EMAIL )) && mailStatus $backup
|
||||
snmpStatus $backup
|
||||
done
|
||||
|
||||
if [ -n "$SNMPCOMM" -a -n "$SNMPDEST" ]
|
||||
then
|
||||
read uptime discard < /proc/uptime
|
||||
unset discard
|
||||
snmptrap -v 2c -c $SNMPCOMM $SNMPDEST ${uptime/./} 1.3.6.1.4.1.39402.1.1.1 "${snmpTrapContent[@]}"
|
||||
fi
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user