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
|
remote-backup (1.5.3) stable; urgency=low
|
||||||
|
|
||||||
* Use rsync --fake-super when running as user
|
* Use rsync --fake-super when running as user
|
||||||
|
|||||||
@ -10,4 +10,10 @@ TIMEOUT=1800
|
|||||||
RETRY=5
|
RETRY=5
|
||||||
RETRY_DELAY=60
|
RETRY_DELAY=60
|
||||||
|
|
||||||
|
#generate output
|
||||||
|
EMAIL=1
|
||||||
|
#SNMP Traps
|
||||||
|
SNMPDEST=holay.b2f-concept.net
|
||||||
|
SNMPCOMM=b2f
|
||||||
|
|
||||||
ADDITIONAL_RSYNC_OPTS=""
|
ADDITIONAL_RSYNC_OPTS=""
|
||||||
|
|||||||
157
remote-backup
157
remote-backup
@ -66,34 +66,37 @@ do
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
declare -a failedBackups
|
declare -a backupIndex
|
||||||
declare -A failedWith
|
declare -a backupStatus
|
||||||
|
declare -a backupStatusInfo
|
||||||
|
declare -a snmpTrapContent
|
||||||
RETRY=5
|
RETRY=5
|
||||||
RETRY_DELAY=60
|
RETRY_DELAY=60
|
||||||
|
|
||||||
failRsync() {
|
failRsync() {
|
||||||
nameFailed="$1"
|
code=$1
|
||||||
code=$2
|
path="$2"
|
||||||
path="$3"
|
if [ -d "$2" ]
|
||||||
failedBackups+=( "$nameFailed" )
|
|
||||||
if [ -d "$3" ]
|
|
||||||
then
|
then
|
||||||
touch "$3/unfinished.remote-backup"
|
touch "$2/unfinished.remote-backup"
|
||||||
failedWith["$nameFailed"]="RSYNC_PARTIAL $code"
|
backupStatus+=( 2 )
|
||||||
|
backupStatusInfo+=( "rsync errno: $code" )
|
||||||
else
|
else
|
||||||
failedWith["$nameFailed"]="RSYNC_FAILED $code"
|
backupStatus+=( 1 )
|
||||||
|
backupStatusInfo+=( "rsync_errno: $code" )
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
openLog() {
|
openLog() {
|
||||||
exec 3>&1
|
exec 3>&1
|
||||||
|
exec 4>&2
|
||||||
exec 1>> /var/log/remote-backup
|
exec 1>> /var/log/remote-backup
|
||||||
exec 2>&1
|
exec 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
closeLog() {
|
closeLog() {
|
||||||
exec 1>&3
|
exec 1>&3
|
||||||
exec 2>&3
|
exec 2>&4
|
||||||
}
|
}
|
||||||
|
|
||||||
doBackup() {
|
doBackup() {
|
||||||
@ -101,23 +104,24 @@ doBackup() {
|
|||||||
if [ ! -e "$config" ]
|
if [ ! -e "$config" ]
|
||||||
then
|
then
|
||||||
echo "No backups defined, dying." >&2
|
echo "No backups defined, dying." >&2
|
||||||
echo "No backups defined, dying." >&3
|
echo "No backups defined, dying." >&4
|
||||||
exit 128
|
exit 128
|
||||||
fi
|
fi
|
||||||
source /etc/remote-backup/defaults.conf
|
source /etc/remote-backup/defaults.conf
|
||||||
source "$config"
|
source "$config"
|
||||||
|
|
||||||
|
backupIndex+=( "$NAME" )
|
||||||
echo "Debut de backup de ${REMOTE_LOCATION} vers ${SNAPSHOT_RW}/${NAME}/ a $(date +"%H:%M, le %d/%m/%Y")"
|
echo "Debut de backup de ${REMOTE_LOCATION} vers ${SNAPSHOT_RW}/${NAME}/ a $(date +"%H:%M, le %d/%m/%Y")"
|
||||||
|
|
||||||
if [[ "$REMOUNT" == "true" ]]
|
if [[ "$REMOUNT" == "true" ]]
|
||||||
then
|
then
|
||||||
# attempt to remount the RW mount point as RW; else abort
|
# 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 (( $? ))
|
if (( $? ))
|
||||||
then
|
then
|
||||||
echo "snapshot: could not remount $SNAPSHOT_RW readwrite" >&2
|
echo "snapshot: could not remount $SNAPSHOT_RW readwrite" >&2
|
||||||
failedBackups+=( "$NAME" )
|
backupStatus+=( 4 )
|
||||||
failedReason["$NAME"]="REMOUNT_RW $MOUNT_DEVICE"
|
backupStatusInfo+=( "$MOUNT_DEVICE: $mountMsg" )
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@ -131,12 +135,21 @@ doBackup() {
|
|||||||
then
|
then
|
||||||
runBackup emerg.$(date +%Y%m%d%H%M)
|
runBackup emerg.$(date +%Y%m%d%H%M)
|
||||||
else
|
else
|
||||||
if [ -f "$SNAPSHOT_RW/$NAME/.lock" ] \
|
if [ -f "$SNAPSHOT_RW/$NAME/.lock" ] \
|
||||||
&& [ -r /proc/$(<"$SNAPSHOT_RW/$NAME/.lock")/comm ] \
|
&& [ -r /proc/$(<"$SNAPSHOT_RW/$NAME/.lock")/cmdline ]
|
||||||
&& [[ $(</proc/$(<"$SNAPSHOT_RW/$NAME/.lock")/comm) = remote-backup ]]
|
|
||||||
then
|
then
|
||||||
failedBackups+=( "$NAME" )
|
progname=$(</proc/$(<"$snapshot_rw/$name/.lock")/cmdline)
|
||||||
failedReason["$NAME"]=LOCKED
|
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
|
else
|
||||||
echo $$ > "$SNAPSHOT_RW/$NAME/.lock"
|
echo $$ > "$SNAPSHOT_RW/$NAME/.lock"
|
||||||
rotateBackup
|
rotateBackup
|
||||||
@ -240,6 +253,7 @@ runBackup() {
|
|||||||
returncode=$?
|
returncode=$?
|
||||||
case $returncode in
|
case $returncode in
|
||||||
0)
|
0)
|
||||||
|
backupStatus+=( 0 )
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
@ -273,7 +287,7 @@ runBackup() {
|
|||||||
2)
|
2)
|
||||||
if (( proto29 ))
|
if (( proto29 ))
|
||||||
then
|
then
|
||||||
fail "$NAME" PROTO_MISMATCH
|
failRsync PROTO_MISMATCH
|
||||||
else
|
else
|
||||||
cat <<-EOF
|
cat <<-EOF
|
||||||
|
|
||||||
@ -284,7 +298,7 @@ runBackup() {
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
failRsync "$NAME" $returncode "$SNAPSHOT_RW/$NAME/$1"
|
failRsync $returncode "$SNAPSHOT_RW/$NAME/$1"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@ -295,6 +309,54 @@ runBackup() {
|
|||||||
unset proto29
|
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
|
openLog
|
||||||
|
|
||||||
if [ -n "$EMERG" ]
|
if [ -n "$EMERG" ]
|
||||||
@ -309,35 +371,30 @@ fi
|
|||||||
|
|
||||||
closeLog
|
closeLog
|
||||||
|
|
||||||
if (( ${#failedBackups} ))
|
if (( EMAIL ))
|
||||||
then
|
then
|
||||||
cat <<-EOF
|
for backup in ${backupStatus[@]}
|
||||||
Some backups exited non-zero.
|
|
||||||
See the logfile for more detail.
|
|
||||||
|
|
||||||
EOF
|
|
||||||
for backup in ${failedBackups[@]}
|
|
||||||
do
|
do
|
||||||
echo -n "$backup failed: "
|
if (( $backup ))
|
||||||
read info more_info <<< "${failedWith["$backup"]}"
|
then
|
||||||
case $info in
|
cat <<-EOF
|
||||||
RSYNC_PARTIAL)
|
Some backups exited non-zero.
|
||||||
echo "Partial transfer, will *NOT* get rotated - rsync returned $more_info."
|
See the logfile for more detail.
|
||||||
;;
|
|
||||||
RSYNC_FAILED)
|
EOF
|
||||||
echo "No files transferred - rsync returned $more_info."
|
break
|
||||||
;;
|
fi
|
||||||
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
|
|
||||||
done
|
done
|
||||||
fi
|
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