ich bin langsam mit meinem Latein am Ende und erbitte euren Rat
Ich habe ein Skript, dass in der Konsole einwandfrei funktioniert: Eine laufende VM wird gesichert, exportiert und anschließend wieder gestartet.
Sobald ich das Skript als Cronjob startet, bekomme ich eine E-Mail mit dem freundlichen Hinweis:
Die VM wird erfolgreich gesichert, exportiert und anschließend wieder gestartet. Das einzig "störende" ist die E-Mail, in der etwas positive(re)s stehen sollte - damit man sofort erkennt "Backup erfolgreich"/pfad/zum/skript/skript.sh: Zeile 24: printf: Schreibfehler: Datenübergabe unterbrochen (broken pipe).
/pfad/zum/skript/skript.sh: Zeile 25: printf: Schreibfehler: Datenübergabe unterbrochen (broken pipe).
/pfad/zum/skript/skript.sh: Zeile 31: printf: Schreibfehler: Datenübergabe unterbrochen (broken pipe).
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
/pfad/zum/skript/skript.sh: Zeile 42: printf: Schreibfehler: Datenübergabe unterbrochen (broken pipe).
/pfad/zum/skript/skript.sh: Zeile 42: printf: Schreibfehler: Datenübergabe unterbrochen (broken pipe).
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
/pfad/zum/skript/skript.sh: Zeile 58: printf: Schreibfehler: Datenübergabe unterbrochen (broken pipe).
/pfad/zum/skript/skript.sh: Zeile 58: printf: Schreibfehler: Datenübergabe unterbrochen (broken pipe).
/pfad/zum/skript/skript.sh: Zeile 72: printf: Schreibfehler: Datenübergabe unterbrochen (broken pipe).
Ich hab inzwischen alle Kommandos bzw. die Pfade im Skript geprüft, aber soweit ist alles stimmig. Ich vermute deswegen, dass am Cronjob noch irgendwas anders sein muss, als in Konsole..?
..und zum Schluss:
Das ganze läuft auf Openmediavault 2.2.14
Code: Alles auswählen
root@homeserver:~# cat /proc/version
Linux version 3.16.0-0.bpo.4-amd64 (debian-kernel@lists.debian.org) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 SMP Debian 3.16.39-1+deb8u1~bpo70+1 (2017-02-24)
Code: Alles auswählen
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PATH
# =======================================================
# =======================================================
VMNAME="debian8"
EXPORTDIR="/media/zielverzeichnis/$VMNAME"
VBOXMANAGE="/usr/bin/VBoxManage -q"
DATE=$(date +%Y-%m-%d_%H-%M)
DAYS="30"
# =======================================================
# =======================================================
ERR="nothing"
SECONDS=0
# Get the vm state
VMSTATE_EXPORT=$(vboxmanage showvminfo $VMNAME --machinereadable > /media/zielverzeichnis/$VMNAME-status.log)
VMSTATE=$(awk -F '=' '$1 == "VMState" { printf $2 }' /media/zielverzeichnis/$VMNAME-status.log)
printf "=====================================================\n$VMNAME\n=====================================================\n"
printf "$VMNAME: $VMSTATE\n\n"
# If the VM's state is running or paused, save its state
if [[ $VMSTATE == \"running\" || $VMSTATE == \"paused\" ]];
then
printf "Shutting down $VMNAME..."
vboxmanage controlvm "$VMNAME" savestate
if [ $? -ne 0 ];
then ERR="saving the state";
fi
fi
sleep 5
# Export the vm as appliance
if [ "$ERR" == "nothing" ];
then
printf "$VMNAME is down!\nExporting $VMNAME..."
vboxmanage export "$VMNAME" --ovf20 --output ${EXPORTDIR}/${VMNAME}_${DATE}.ova
if [ $? -ne 0 ];
then
ERR="exporting"
else
# Get file size
FILESIZE=$(du -h ${EXPORTDIR}/${VMNAME}_${DATE}.ova | cut -f 1)
fi
else
printf "Not exporting because the VM's state couldn't be saved."
fi
# Resume the VM to its previous state if that state was paused or running
if [[ $VMSTATE == \"running\" || $VMSTATE == \"paused\" ]];
then
printf "Filename: ${VMNAME}_${DATE}.ova\nResuming previous state..."
vboxmanage startvm "$VMNAME" --type headless
if [ $? -ne 0 ];
then ERR="resuming";
fi
if [ $VMSTATE == \"paused\" ];
then
vboxmanage controlvm $VMNAME pause
if [ $? -ne 0 ];
then ERR="pausing";
fi
fi
fi
printf "Deleted files older than $DAYS days:"
find ${EXPORTDIR} -type f -mtime +${DAYS} -ls
find ${EXPORTDIR} -type f -mtime +${DAYS} -delete