Moin.
Habe auf Anregung eines IBM Dokumentes ein script geschrieben, welches die monatliche Datenbankwartung (fixup, compact, updall) auf Multicoremaschinen extrem beschleunigen kann.
Alle Wartungs-Programme können ja per Eingabedatei mit einer Auflistung der Datenbanken die man verarbeiten möchte, gefüttert werden. Die Eingabedatei muss die Dateiendung ".ind" aufweisen und wird dem jeweiligen Programm als Parameter übergeben.
Was macht das script?
- Ermittelt die Anzahl physischer CPU Cores
- Generiert pro Core je eine Inputdatei mit den Lotus Notes Datenbanken (*.nsf)
- Beendet den Domino Server kontrolliert
- Startet im Hintergrund pro CPU-Core ein script mit den Wartungsprogrammen und einer Inputdatei als Parameter
- Wartet bis alle Wartungsscripts beendet wurden
- Startet den Domino Server wieder
Die Scripts sind rudimentär und ohne größere Fehlerabfragen. Sie können durch Anpassen der Variablen relativ leicht geändert werden. Veränderungen/Verbesserungen dürfen gerne hier gepostet werden!
Steuerndes Script #1
#!/bin/bash
# Domino Binaries
DOMINO_DIR=/opt/ibm/lotus
#Notes Data
NOTES_DIR=/notesdata
# Domino Logfiles
LOG_DIR=/var/log/notes
# Domino Server Wartungsscript
MNT_SCRIPT=/usr/sbin/dominomnt2.sh
# Anzahl CPU Cores ermitteln
CORES=`cat /proc/cpuinfo | grep -m 1 "cpu cores" | awk '{print $NF}'`
echo $CORES "CPU Kerne für Verarbeitung gefunden."
# Domino Server beenden
echo "Lotus Domino Server wird kontrolliert beendet..."
cd $NOTES_DIR
su notes -c "$DOMINO_DIR/bin/server -quit"
count=0
NOTES_RUNNING=`ps -fu notes | grep $DOMINO_DIR | awk '{print $2}'`
while [ "$NOTES_RUNNING" ] ; do
sleep 10
count=`expr count +1`
if [ $count -eq 30 ] ; then
rm "~notes.lck"
su notes -c "$DOMINO_DIR/bin/nsd -kill"
break
fi
NOTES_RUNNING=`ps -fu notes | grep $DOMINO_DIR | awk '{print $2}'`
done
echo "Domino Server beendet!"
# Alte temporäre .ind Files löschen
echo -n "Lösche alte Eingabedateien..."
rm /tmp/_notesdbin*.ind
echo "fertig!"
# Wartungsscripts starten
for (( i=1; i <= CORES; i++ ))
do
echo "Starte Wartungsscript #"$i" auf Eingabedatei /tmp/_notesdbin"$i".ind"
su notes -c "$MNT_SCRIPT /tmp/_notesdbin$i.ind &"
sleep 3
done
# Check ob alle Wartungsscripts beendet wurden
SCRIPT_RUNNING=`ps -fu notes | grep $MNT_SCRIPT | awk '{print $2}'`
while [ "$SCRIPT_RUNNING" ] ; do
sleep 60
SCRIPT_RUNNING=`ps -fu notes | grep $MNT_SCRIPT | awk '{print $2}'`
done
# Domino Server wieder starten
echo "Alle Wartungsscripts beendet, Domino Server wird gestartet!"
cd -
/etc/init.d/domino start
exit 0
Worker Script (Wird vom Steuerscript aufgerufen)
#!/bin/bash
TODAY=`date +"%Y.%m.%d"` # yyyy.mm.dd
# Domino Binaries
DOMINO_DIR=/opt/ibm/lotus
#Notes Data
NOTES_DIR=/notesdata
# Domino Logfiles
LOG_DIR=/var/log/notes
#Inputfile in Parameter #1
DB_INFILE=$1
cd $NOTES_DIR
#Fixup starten
$DOMINO_DIR/bin/fixup -J -F $DB_INFILE >> "$LOG_DIR/$TODAY_fixup.log"
#Compact starten
$DOMINO_DIR/bin/compact -c $DB_INFILE >> "$LOG_DIR/$TODAY_compact.log"
#updall starten
$DOMINO_DIR/bin/updall -R $DB_INFILE >> "$LOG_DIR/$TODAY_updall.log"
exit 0
Benutzung der Scripts auf eigene Verantwortung!