BASH-Skript in Linux - Mailversand funktioniert nicht
Hallo.
Gleich vorweg:
Ich habe keine Ahnung von BASH- oder BATCH-Skripten.
Ich such mir hier und da was zusammen und passe es an.
Aus einem Backup-Skript habe ich mir einen Teil herausgenommen.
Damit soll ein Integritätstest der Datenbank gemacht werden.
Der Test läuft und eine Log-Datei wird geschrieben.
Allerdings wird keine Mail wie im Backup-Skript verschickt.
Aber das wäre notwendig.
Könnte sich das jemand bitte anschauen?
Ist dort eine Variable (vermutlich X) nicht richtig gesetzt oder übermittelt keinen Wert?
Den Ersteller (einer meiner Vorgänger) kann ich nicht mehr erreichen und mein Kollege meinte auch:
Selbst wenn ich ihn erreichen würde, wäre es ihm egal und er würde nicht helfen.
Backup-Skript:
Zum Integritätstest umgebaut:
Bin ich blind? Oder wo liegt der Fehler?
Gruß Daniel
Gleich vorweg:
Ich habe keine Ahnung von BASH- oder BATCH-Skripten.
Ich such mir hier und da was zusammen und passe es an.
Aus einem Backup-Skript habe ich mir einen Teil herausgenommen.
Damit soll ein Integritätstest der Datenbank gemacht werden.
Der Test läuft und eine Log-Datei wird geschrieben.
Allerdings wird keine Mail wie im Backup-Skript verschickt.
Aber das wäre notwendig.
Könnte sich das jemand bitte anschauen?
Ist dort eine Variable (vermutlich X) nicht richtig gesetzt oder übermittelt keinen Wert?
Den Ersteller (einer meiner Vorgänger) kann ich nicht mehr erreichen und mein Kollege meinte auch:
Selbst wenn ich ihn erreichen würde, wäre es ihm egal und er würde nicht helfen.
Backup-Skript:
#!/bin/bash
# (c) 2011 xxx
# Backupscript
# ---------------------------------------------------------------------------------
# Deklarationsteil
# ---------------------------------------------------------------------------------
# Datenbank Integritaetstest / Reorganisation durchfuehren?
# Hierdurch wird die Integritaet der Datenbank gebrueft und die Transaktionsnummern
# werden zurueckgesetzt, anschliessend wird die Datenbank reorganisiert.
# ACHTUNG Hierdurch verlaengert sich die Dauer des Backups erheblich!!!
# <N> oder <J>
INTEG=N
# Max. Anzahl an Sicherungen (immer Vollbackup)
# wenn MAX = 0 dann taegliche Sicherung mit Datum
# wenn MAX = n (n = ganze Zahl) dann n Anzahl an Sicherung, wenn n erreicht, wird Sicherung 1 ueberschrieben
# wenn MAX = 1 dann Generationensicherung
MAX=1
# Sohn: Montags - Donnerstags (Mo_backup, Di_backup, Mi_backup, Do_backup) MAXIMAL 4
# Vater (Fr. Wochensicherung) (FR_1_backup, Fr_2_backup, Fr_3_backup, Fr_4_backup, Fr_5_backup) MAXIMAL 5
# Gro¦vater (Sa. Monatssicherung (JAN, FEB, MAR, APR, MAI, JUN, JUL, AUG, SEP, OKT, NOV, DEZ) MAXIMAL 12
# Hauptverzeichnis fuer Backup-Ziel
BACKUPDIR=/backup
# Datenbank-Kopie speichern in
BACKUPBRUNIE="/backup/brunie"
# Unterverzeichnis fuer Archive / Backups
BACKUPTAR="/backup/archiv"
# Zu sichernde Verzeichnisse
BACKUP="$BACKUPBRUNIE" # Verzeichnis von Datenbank-Kopie, welche zum Zeitpunkt der Sicherung erstellt wird
BACKUP[1]=/usr/gtm # Datenbank Routinen Verzeichnis
BACKUP[2]=/srv/brunie
# Dateiname der Sicherung
BACKUPN=brunie
BACKUPN[1]=gtm
BACKUPN[2]=srv-brunie
# Email Adresse fuer Log
# wenn EMAIL=root oder CCEMAIL=root dann an lokalen root-Account
# Sicherung bei/von COMPANY
EMAIL="x@x.de"
COMPANY="Kundenname"
###### Nach Sicherung BACKUP auf anderen Ort verschieben ? ######
# MOVEBACKUP=J -> verschieben MOVEBACKUP=N -> nicht verschieben
MOVEBACKUP=N
# Entfernter Ort fuer das Backup
MOUNTPOINT=/mnt/nas # muss lokal vorhanden sein!!!
MOUNTSOURCE=//x.x.x.x/backup/brunie # entfernte Freigabe
MOUNTUSER=admin # Domaene/Benutzer
MOUNTPW=bru#22+nie001 # Passwort
###################################################################################
######################## !!!AB HIER NICHTS MEHR AENDERN!!! ########################
###################################################################################
# GT.M starten
GTMSTART="/etc/init.d/brunie start"
# GT.M stoppen
GTMSTOP="/etc/init.d/brunie stop"
# Zeitstempel
DATE=`date +"%F"` # Datum: 2011-01-07
WT=`date +"%a"` # Wochentagname: Fr
TIM=`date +"%d"` # Tag im Monat: 07
TNW=`date -d "next Week" +"%d" ` # Tag naechste Woche: 14
MHEUTE=`date +"%m"` # Monat heute
MNW=`date -d "next Week" +"%m" ` # Monat naechste Woche
MONHEUTE=`date +"%b"` # Monatsname Heute
# Log Datei
LOGFILE=backup_protokoll
LOGEXT=log
LOGDIR=/backup/log
LOG=$LOGDIR/$LOGFILE"."$LOGEXT
LOGDIRARCHIV=$LOGDIR/tmp
LOGA=$LOGFILE"_"$DATE"."$LOGEXT
LOGARCHIV=$LOGDIRARCHIV/$LOGA
LOGCNT=$LOGDIR/cnt.log
LOGFR=$LOGDIR/frcnt.log
LOGMONAT=$LOGDIR/monat.log
# Trennlinie in Datei
TR="---------------------------------------------"
# ---------------------------------------------------------------------------------
# ENDE Deklarationsteil
# ---------------------------------------------------------------------------------
###################################################################################
################### !!!PRUEFUNG OB VERZECIHNISSE VORHANDEN!!! ###################
###################################################################################
if [ ! -d $MOUNTPOINT ]; then mkdir -p $MOUNTPOINT; fi
if [ ! -d $LOGDIR ]; then mkdir -p $LOGDIR; fi
if [ ! -d $LOGDIRARCHIV ]; then mkdir -p $LOGDIRARCHIV; fi
if [ ! -d $BACKUPDIR ]; then mkdir -p $BACKUPDIR; fi
if [ ! -d $BACKUPBRUNIE ]; then mkdir -p $BACKUPBRUNIE; fi
if [ ! -d $BACKUPTAR ]; then mkdir -p $BACKUPTAR; fi
if [ -f $LOG ]; then rm -f $LOG; touch $LOG; else touch $LOG; fi
if [ ! -f $LOGCNT ]; then touch $LOGCNT; let I=1; echo $I > $LOGCNT; fi
if [ ! -f $LOGFR ]; then touch $LOGFR; let I=0; echo $I > $LOGFR; fi
if [ ! -f $LOGMONAT ]; then touch $LOGMONAT; echo $MHEUTE > $LOGMONAT; fi
###################################################################################
######################### !!!BESTIMMEN DER BACKUP-Art/Name!!! ########################
###################################################################################
# wenn MAX > 1 dann mit aktuellem I
# wenn MAX = 0 dann mit Datum
# wenn MAX = 1 dann Generationen
if [ "$MAX" -eq 0 ]; then # taegliche Sicherung
for ((i=0;i<${#BACKUP[@]};i++)); # Fuer Anzahl Backups im Array
do
BACKUPN[$i]=${BACKUPN[$i]}"_"$DATE".tgz" # Setze Backupname mit Datum
done
fi
if [ "$MAX" -gt 1 ]; then # ueberschreibende Sicherung
CNT=`cat $LOGCNT` # Ermittle welche Nummer
X=$CNT
if [ "$X" -ge $MAX ]; then # Wenn Zaehler groe¦er MAX
let X=1 # Setze Zaehler auf 1
echo $X > $LOGCNT
else
let X=$X+1 # ansonsten Addiere Zaehler um 1
echo $X > $LOGCNT
fi
for ((i=0;i<${#BACKUP[@]};i++)); # Fuer Anzahl Backups im Array
do
BACKUPN[$i]=${BACKUPN[$i]}"_"$X".tgz" # Setze Backupnamen mit Nummer
done
fi
if [ "$MAX" -eq 1 ]; then # Generationssicherung
case "$WT" in
Mo|Di|Mi|Do|Mon|Tue|Wed|Thu) # Kind Sicherung Max 4 Stueck
for ((i=0;i<${#BACKUP[@]};i++)); # Fuer Anzahl Backups im Array
do
BACKUPN[$i]=$WT"_"${BACKUPN[$i]}".tgz" # Setze Wochentag+Backupnamen
done
;;
Fr|Fri) # Freitags Wochensicherung
MON=`cat $LOGMONAT` # welcher Monat?
if [ "$MON" == "$MHEUTE" ]; then # wenn Monat aktueller Monat
CNT=`cat $LOGFR`
FR=$CNT # Ermittle Zaehler
let FR=$FR+1 # Setze Zaehler um 1 hoeher
echo $FR > $LOGFR
else # ansonsten neuer Monat
echo $MHEUTE > $LOGMONAT # Setze Monat auf aktuellen Monat
let FR=1 # Setze Freitagszaehler auf 1
echo $FR > $LOGFR
fi
for ((i=0;i<${#BACKUP[@]};i++)); # Fuer Anzahl Backups im Array
do
BACKUPN[$i]=$WT"_"$FR"_"${BACKUPN[$i]}".tgz"
done
;;
Sa|Sat) # Samstags Sicherung am Monatsende
if [ "$TIM" -gt "$TNW" ]; then # Wenn heute > naechste Woche Samstag
for ((i=0;i<${#BACKUP[@]};i++));
do
BACKUPN[$i]=$MONHEUTE"_"${BACKUPN[$i]}".tgz"
done
else
exit 0
fi
;;
*) # alle anderen Wochentage exit
exit 0
;;
esac
fi
###################################################################################
################### !!! FUNKTIONEN !!! ###################
###################################################################################
# FUNKTION MAILLOG -> mailt LOG an $EMAIL
function maillog ()
{
OK=""
OK=$1
if [ "$OK" == "V" ]; then
mutt -a "$LOG" -s "$COMPANY Sicherung abgeschlossen" -i "$LOG" -- $EMAIL </dev/null
else
mutt -a "$LOG" -s "$COMPANY Achtung: Sicherung fehlgeschlagen" -i "$LOG" -- $EMAIL </dev/null
fi
}
# FUNKTION TR -> fuegt $TR in LOG ein
function tr ()
{
echo $TR >> $LOG 2>&1
}
# FUNKTION MUMPS -> Variable mumps mit Anzahl mumps Prozesse
function mumps ()
{
mumps=`ps -fe|grep [m]umps|wc -l`
}
# FUNKTIION LOG -> fuegt $1 in LOG ein
function log ()
{
if [ "$1" != "" ]; then
echo $1" "`date +"%F %X"` >> $LOG 2>&1
echo " " >> $LOG 2>&1
else
echo " " >> $LOG 2>&1
fi
}
###################################################################################
################### !!! BACKUP !!! ###################
###################################################################################
# BACKUP START, WENN BACKUPVERZEICHNISSE VORHANDEN
if [ ! -d $BACKUPDIR ]; then log "KEIN BACKUPVERZEICHNIS VORHANDEN!!!!"; maillog X; exit 0; fi
if [ ! -d $BACKUPBRUNIE ]; then log "KEIN VERZEICHNIS FUER DATENBANK-KOPIE VORHANDEN!!!!"; maillog X; exit 0; fi
if [ ! -d $BACKUPTAR ]; then log "KEIN VERZEICHNIS FUER ARCHIVE VORHANDEN!!!!"; maillog X; exit 0; fi
tr; log "Backup "$X" vom "; tr
# Pruefen ob BRUNIE installiert, ansonsten Abbruch
# Pruefen ob Datenbank lauft, ansonsten Abbruch
if [ ! -f /etc/init.d/brunie ]; then
log "KEIN BRUNIE VORHANDEN!!!"
log "Installation pruefen!"
maillog X
exit 0
else
mumps
if [ $mumps -gt "0" ]; then
log "Datenbank heruntergefahren:"
log
$GTMSTOP >> $LOG 2>&1
tr
else
log "Datenbank laeuft nicht!"
log "Bitte Installation uberpruefen!"
log "Abbruch des Backups:"
tr
maillog X
exit 0
fi
fi
# Integrationstest fuer alle *.dat
# Transaktionsnummern zuruecksetzten fuer alle *.dat
if [ "$INTEG" = "J" ] ; then
gtm_dist="/usr/gtm"
export gtm_dist
log "INTEG Pruefung: "
tr
uci=""
vz=`pwd`
cd /brunie
for uci in `ls *.dat`; do
log "INTEG fuer: $uci "
/usr/gtm/mupip INTEG -FAST /brunie/$uci >> $LOG 2>&1
/usr/gtm/mupip INTEG -TN_RESET /brunie/$uci >> $LOG 2>&1
/usr/gtm/mupip REORG /brunie/$uci >> $LOG 2>&1
tr
done
cd $vz
fi
#Datenbank kopieren
log "Datenbank kopieren:"
rm -Rf $BACKUPBRUNIE/*
cp -aR -pR /brunie/* $BACKUPBRUNIE >> $LOG >/dev/null 2>&1
log "Datenbank kopiert nach $BACKUPBRUNIE :"
tr
#
# Testdatenbanken anlegen?
#
# Datenbank wieder starten
log "Datenbank starten:"; $GTMSTART >> $LOG 2>&1; tr
# Pruefen ob nach Datenbankstart Prozesse vorhanden sind, ansonsten Abbruch
mumps
if [ $mumps -le "0" ]; then
log "Datenbank nicht gestartet!"
log "Abbruch des Backups:"
tr
maillog X
exit 0
fi
# Pruefen welche Sicherungsart und ob Sicherungen vorhanden sind
# Archiv-Dateien (Tarballs) erstellen
for ((i=0;i<${#BACKUP[@]};i++));
do
log "Backup "${BACKUPN[$i]}" erstellen:"
tar czf $BACKUPTAR/${BACKUPN[$i]} ${BACKUP[$i]} >> $LOG 2>&1
tr
done
# Wenn Verschiebung auf entfernte Ort gewuenscht,
# entferntes Verzeichnis einhaengen, verschieben, und aushaengen
# ansonsten echo in LOG schreiben
if [ "$MOVEBACKUP" == "J" ]; then
log "Einhaengen des entfernten Sicherungsortes:"
mount -t cifs -o username="$MOUNTUSER",password="$MOUNTPW",gid=0,uid=0,file_mode=0777,dir_mode=0777 "$MOUNTSOURCE" "$MOUNTPOINT" >> $LOG 2>&1
OK=`echo $?`
if [ "$OK" -gt 0 ]; then
log "ACHTUNG:"
log "Das einhaengen des entfernten Sicherungsortes hat nicht funktioniert!"
log "Bitte Mount pruefen!"
tr
maillog X
exit 0
else
for ((i=0;i<${#BACKUP[@]};i++));
do
log "Verschiebe Backup "${BACKUPN[$i]}" nach $MOUNTPOINT"
mv -f $BACKUPTAR/${BACKUPN[$i]} $MOUNTPOINT >> $LOG 2>&1
tr
done
fi
log "Aushaengen des entfernten Sicherungsortes: "
umount $MOUNTPOINT >> $LOG 2>&1
else
log "Datenbanksicherung erstellt unter $BACKUPDIR/brunie"
log "Archive erstellt unter $BACKUPTAR" >> $LOG 2>&1
log "Folgende Archive erstellt:" >> $LOG 2>&1
for ((i=0;i<${#BACKUP[@]};i++));
do
echo $BACKUPTAR/${BACKUPN[$i]} >> $LOG 2>&1
done
tr
log "Inhalt von $BACKUPTAR" >> $LOG 2>&1
ls -1 $BACKUPTAR >> $LOG 2>&1
tr
fi
# Sicherung abschliessen
log "Sicherung abgeschlossen: "; tr; maillog V
# Zusaetzlich durchfuehren
# Print Files loeschen
# rm -f /tmp/BRUNIE_Print_File*
rm -f /tmp/gtm_mutex*
#Ende des Scripts
cp $LOG $LOGARCHIV
exit 0
Zum Integritätstest umgebaut:
#!/bin/bash
# (c) 2018 xxx
# INTEG-script
INTEG=J
EMAIL="x@x.de"
COMPANY="CentOS Test Server 208"
# GT.M starten
GTMSTART="/etc/init.d/brunie start"
# GT.M stoppen
GTMSTOP="/etc/init.d/brunie stop"
# Zeitstempel
DATE=`date +"%F"` # Datum: 2011-01-07
WT=`date +"%a"` # Wochentagname: Fr
TIM=`date +"%d"` # Tag im Monat: 07
TNW=`date -d "next Week" +"%d" ` # Tag naechste Woche: 14
MHEUTE=`date +"%m"` # Monat heute
MNW=`date -d "next Week" +"%m" ` # Monat naechste Woche
MONHEUTE=`date +"%b"` # Monatsname Heute
# Log Datei
LOGFILE=integ_protokoll
LOGEXT=log
LOGDIR=/brunie/log
LOG=$LOGDIR/$LOGFILE"."$LOGEXT
LOGDIRARCHIV=$LOGDIR/tmp
LOGA=$LOGFILE"_"$DATE"."$LOGEXT
LOGARCHIV=$LOGDIRARCHIV/$LOGA
LOGCNT=$LOGDIR/cnt.log
LOGFR=$LOGDIR/frcnt.log
LOGMONAT=$LOGDIR/monat.log
# Trennlinie in Datei
TR="---------------------------------------------"
###################################################################################
################### !!!PRUEFUNG OB VERZECIHNISSE VORHANDEN!!! ###################
###################################################################################
if [ ! -d $LOGDIR ]; then mkdir -p $LOGDIR; fi
if [ ! -d $LOGDIRARCHIV ]; then mkdir -p $LOGDIRARCHIV; fi
if [ -f $LOG ]; then rm -f $LOG; touch $LOG; else touch $LOG; fi
if [ ! -f $LOGCNT ]; then touch $LOGCNT; let I=1; echo $I > $LOGCNT; fi
if [ ! -f $LOGFR ]; then touch $LOGFR; let I=0; echo $I > $LOGFR; fi
if [ ! -f $LOGMONAT ]; then touch $LOGMONAT; echo $MHEUTE > $LOGMONAT; fi
###################################################################################
################### !!! FUNKTIONEN !!! ###################
###################################################################################
# FUNKTION MAILLOG -> mailt LOG an $EMAIL
function maillog ()
{
OK=""
OK=$1
if [ "$OK" == "V" ]; then
mutt -a "$LOG" -s "$COMPANY INTEG-Test abgeschlossen" -i "$LOG" -- $EMAIL </dev/null
else
mutt -a "$LOG" -s "$COMPANY Achtung: INTEG-Test fehlgeschlagen" -i "$LOG" -- $EMAIL </dev/null
fi
}
# FUNKTION TR -> fuegt $TR in LOG ein
function tr ()
{
echo $TR >> $LOG 2>&1
}
# FUNKTION MUMPS -> Variable mumps mit Anzahl mumps Prozesse
function mumps ()
{
mumps=`ps -fe|grep [m]umps|wc -l`
}
# FUNKTION LOG -> fuegt $1 in LOG ein
function log ()
{
if [ "$1" != "" ]; then
echo $1" "`date +"%F %X"` >> $LOG 2>&1
echo " " >> $LOG 2>&1
else
echo " " >> $LOG 2>&1
fi
}
# Pruefen ob BRUNIE installiert ist, ansonsten Abbruch
# Pruefen ob Datenbank laeuft, ansonsten Abbruch
if [ ! -f /etc/init.d/brunie ]; then
log "KEIN BRUNIE VORHANDEN!!!"
log "Installation pruefen!"
maillog X
exit 0
else
mumps
if [ $mumps -gt "0" ]; then
log "Datenbank heruntergefahren:"
log
$GTMSTOP >> $LOG 2>&1
tr
else
log "Datenbank laeuft nicht!"
log "Bitte Installation uberpruefen!"
log "Abbruch des INTEG-Testes:"
tr
maillog X
exit 0
fi
fi
# Integrationstest fuer alle *.dat
# Transaktionsnummern zuruecksetzten fuer alle *.dat
if [ "$INTEG" = "J" ] ; then
gtm_dist="/usr/gtm"
export gtm_dist
log "INTEG Pruefung: "
tr
uci=""
vz=`pwd`
cd /brunie
for uci in `ls *.dat`; do
log "INTEG fuer: $uci "
/usr/gtm/mupip INTEG -FAST /brunie/$uci >> $LOG 2>&1
/usr/gtm/mupip INTEG -TN_RESET /brunie/$uci >> $LOG 2>&1
/usr/gtm/mupip REORG /brunie/$uci >> $LOG 2>&1
tr
done
cd $vz
fi
# Datenbank wieder starten
log "Datenbank starten:"; $GTMSTART >> $LOG 2>&1; tr
# Pruefen ob nach Datenbankstart Prozesse vorhanden sind, ansonsten Abbruch
mumps
if [ $mumps -le "0" ]; then
log "Datenbank nicht gestartet!"
log "Abbruch des INTEG-Testes:"
tr
maillog X
exit 0
fi
#Ende des Scripts
cp $LOG $LOGARCHIV
exit 0
Bin ich blind? Oder wo liegt der Fehler?
Gruß Daniel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 390482
Url: https://administrator.de/contentid/390482
Ausgedruckt am: 22.11.2024 um 22:11 Uhr
12 Kommentare
Neuester Kommentar
Moin,
Bitte nutze Code-Tags und kürze Deinen Code auf das wesentliche, damit man sich nicht durch alles wühlen muß, sondern nur durch die fragliche Stelle.
lks
Bitte nutze Code-Tags und kürze Deinen Code auf das wesentliche, damit man sich nicht durch alles wühlen muß, sondern nur durch die fragliche Stelle.
lks
o.k.
Code weglassen?
Ich wurde hier schon einmal belehrt nicht Teile des Codes wegzulassen, da man sonst den Zusammenhang nicht erkennen würde....
Wie denn nun???
Ich wurde hier schon einmal belehrt nicht Teile des Codes wegzulassen, da man sonst den Zusammenhang nicht erkennen würde....
Wie denn nun???
Maßvoll kürzen. Es sollten soviel Code wie nötig, aber so wenig Code wie möglich gepostet werden. Wenn man erst eingie hundert Zeilen Code druchblättern muß, hält das Leute wie mich z.B. davon ab sich da reinzuarbeiten. Aber nur die (vermeintlich) betroffen Zeile allein zu posten hilft natürlich auch nciht weiter, wenn der Fehler eine Zeile davor oder danach steckt.
Also scheun, ob Du ein passenden mittelmaß findest.
lks
Zitat von @Kraemer:
Moin,
wenn ich das auf die Schnelle richtig überflogen habe, verschickt das Script nur im Fehlerfall eine Mail.
Du musst da noch ein einbauen.
Moin,
wenn ich das auf die Schnelle richtig überflogen habe, verschickt das Script nur im Fehlerfall eine Mail.
Du musst da noch ein
maillog V
Stimmt. es wird immer nur maillog X aufgerufen. ist mri vorhin zwar aufgefallen, aber habe mir nichts dabei gedacht. Ich dachte der TO will es so.
lks
Weil das in der Funktion maillog steht.
lks