Steenderen.NET

Domoticz auto-backup naar (S)FTP – Versie 1.3

Status: Dit is de laatste versie van dit script.

Beschrijving

Script voor het automatisch maken van een backup van Domoticz en het wegschrijven hiervan naar een (S)FTP-locatie (bijvoorbeeld naar een NAS).

Van de volgende onderdelen wordt een backup gemaakt:

  1. Domoticz database
  2. Domoticz Script folder
  3. Cronjobs

Middels deze drie items is het mogelijk om Domoticz volledig te herstellen, bijvoorbeeld na de herinstallatie van Raspbian op je Raspberry Pi.

Update

Verbeterde versie van versie 1.2 van dit script. Support toegevoegd voor SFTP, aangezien ik liever geen FTP meer actief heb staan op mijn NAS i.v.m. de onveiligheid daarvan.

Code

# Steenderen.NET
# Domoticz auto-backup naar (S)FTP – Versie 1.3

#!/bin/bash

# Setup
DOMOTICZ_SERVER="x.x.x.x:yy"	# IP-adres:Poort van je Domoticz server
FTP_SERVER="x.x.x.x:yy"		# IP-adres:Poort van je FTP server
FTP_SFTP="yes"			# Vul "yes" i.g.v. SFTP in
FTP_USERNAME="username"		# Gebruikersnaam voor FTP
FTP_PASSWORD="password"		# Wachtwoord voor FTP
FTP_DIRECTORY="/map/map"	# Locatie op je FTP voor de Backup

# No need to edit below here.
echo "Start running backup script."

TIMESTAMP=`/bin/date +%Y%m%d%H%M%S`

# Create temp-directory if it does not already exists.
TEMP_DIR="/home/pi/temp"

if [ -d $TEMP_DIR ] ; then
    echo "- Temp-directory already exists, no need to create it."
else
    echo "- Temp-directory does not exists, creating it now."
    /bin/mkdir $TEMP_DIR
fi

# Create backup file for database.
echo "- Creating backup file for database."
BACKUP_DB=$TIMESTAMP"_db.db"
BACKUP_DB_GZ=$BACKUP_DB".gz"
/usr/bin/curl -s http://$DOMOTICZ_SERVER/backupdatabase.php > $TEMP_DIR/$BACKUP_DB

# TEST URL WITH 512MB DUMMY FILE TO CHECK IF LARGE BACKUP FILES ARE A PROBLEM.
#/usr/bin/curl -s  http://ipv4.download.thinkbroadband.com/512MB.zip > $TEMP_DIR/$BACKUP_DB

gzip -9 $TEMP_DIR/$BACKUP_DB

# Create backup file for scripts directory.
echo "- Creating backup file for scripts-directory."
BACKUP_SCRIPTS=$TIMESTAMP"_scripts.tar.gz"
tar -zcf $TEMP_DIR/$BACKUP_SCRIPTS /home/pi/domoticz/scripts/

# Create backup file for crontab.
echo "- Creating backup file for crontab."
BACKUP_CRONTAB=$TIMESTAMP"_crontab.txt"
crontab -l > $TEMP_DIR/$BACKUP_CRONTAB

# Send backup files to FTP or SFTP location.
if [ $FTP_SFTP = "yes" ] ; then
	echo "- Sending backup files to SFTP location."
	curl -k -s --disable-epsv -T "{$TEMP_DIR/$BACKUP_DB_GZ,$TEMP_DIR/$BACKUP_SCRIPTS,$TEMP_DIR/$BACKUP_CRONTAB}" -u "$FTP_USERNAME:$FTP_PASSWORD" "sftp://"$FTP_SERVER$FTP_DIRECTORY"/"
else
	echo "- Sending backup files to FTP location."
	curl -s --disable-epsv -T "{$TEMP_DIR/$BACKUP_DB_GZ,$TEMP_DIR/$BACKUP_SCRIPTS,$TEMP_DIR/$BACKUP_CRONTAB}" -u "$FTP_USERNAME:$FTP_PASSWORD" "ftp://"$FTP_SERVER$FTP_DIRECTORY"/"
fi

# Remove temp backup file
echo "- Removing temp files."
/bin/rm $TEMP_DIR/$BACKUP_DB_GZ
/bin/rm $TEMP_DIR/$BACKUP_SCRIPTS
/bin/rm $TEMP_DIR/$BACKUP_CRONTAB

# Domoticz logging
echo "- Writing log to Domoticz."
wget -q --delete-after "http://$DOMOTICZ_SERVER/json.htm?type=command&param=addlogmessage&message=Backup to (S)FTP script finished with timestamp ID $TIMESTAMP."

# Done!
echo "Done running backup script."

Installatie-instructies

Script plaatsen in configureren

Persoonlijk heb ik dit script opgeslagen onder /home/pi/domoticz/scripts/backup_ftp.sh. Ik plaats hier al mijn scripts in, zodat die mee worden genomen in de backup die gemaakt worden middels dit script.

In het begin van het script zijn er zes variabelen die je zelf dient in te vullen;

Bij DOMOTICZ_SERVER vul je op de plaats van x.x.x.x:yy het IP-adres of hostname van Domoticz in en de gebruikte poort. Draai je dit script op de Raspberry Pi waarop je ook Domoticz draait en werk je op de standaard poort van Domoticz, dan kan je hier localhost:8080 invullen.

Achter FTP_SERVER vul je op de plaats van x.x.x.x:yy het IP-adres en de gebruikte poort in van de (S)FTP-locatie waar je de backup naar toe wilt schrijven.

Bij FTP_SFPT vul je “yes” in als jouw backup-locatie SFTP ondersteund. Bijvoorbeeld de meeste moderne NAS’en ondersteunen dit wel. Wellicht moet je dit wel apart aanzetten. Mocht je de mogelijkheid voor SFTP hebben, dan is het advies om dat ook vooral te gebruiken. FTP is in principe namelijk geen veilig protocol, aangezien encryptie hierbij ontbreekt.

Voor FTP_USERNAME en FTP_PASSWORD zijn uiteraard de gebruikersnaam en het wachtwoord nodig om in te loggen op de (S)FTP-locatie.

Tot slot is FTP_DIRECTORY het pad op de (S)FTP-locatie waarop je de backup-bestanden opgeslagen wilt hebben.

Testen

Heb je het script opgeslagen, test dan in ieder geval even of het netjes draait en ook daadwerkelijk 3 backup-bestanden oplevert op je (S)FTP-locatie.

Handmatig draaien kan met het volgende commando;

bash /home/pi/domoticz/scripts/backup_ftp.sh

Schedulen van het script

Mocht je niet bekend zijn met crontab, dan adviseer ik je hier even op te Googlen. Voor het aanpassen van je cronjobs gebruik je het volgende commando;

crontab -e

Voor bijvoorbeeld het dagelijks laten draaien van dit script om 23:00 uur gebruik je onderstaande rule;

0 23 * * * /home/pi/domoticz/scripts/backup_ftp.sh

Verder Bericht

Vorige Bericht

9 Reacties

  1. John 28 februari 2021

    Hallo Jos, moet ftp_backup.sh (Handmatig draaien kan met het volgende commando) niet zijn : backup_ftp.sh ?

    Groetjes,

    John

    • jos 2 maart 2021 — Berichtauteur

      Hallo John, je hebt helemaal gelijk. Dankjewel voor het melden, is gelijk gecorrigeerd!

  2. hans 17 oktober 2021

    bij testen krijg ik dit:

    pi@RPI-4:~ $ bash /home/pi/domoticz/scripts/backup_ftp.sh
    Start running backup script.
    /home/pi/domoticz/scripts/backup_ftp.sh: regel 56: syntaxfout: onverwacht bestandseinde

    heeft u een oplossing?

    • jos 17 oktober 2021 — Berichtauteur

      Hallo Hans,

      Klinkt alsof de code niet helemaal correct is overgekomen. Ik zou dus nog een keer proberen om de code in z’n geheel te copy & pasten. Kijken of je dan dezelfde fout krijgt.

      Verder betreft regel 56 de regel waarin de backup middels FTP wordt geupload. Weet je zeker dat de FTP locatie goed werkt, en de credentials OK zijn?

      Gr. Jos

  3. Paul 5 januari 2022

    Hallo Jos,
    Dank voor het script. Ik heb het bijna volledig werkend. Alleen het wegschrijven van de logging naar Domoticz lukt nog niet, althans ik zie niets in /var/log/syslog .
    Heb jij enig idee wat er fout kan gaan? Moet ik misschien poort 8080 gebruiken? Of wordt de logging naar een andere file geschreven?
    Dank al vast voor je reactie.
    Gr, Paul

    • jos 10 januari 2022 — Berichtauteur

      Hi Paul,

      Sorry voor de late reactie, door het verhuizen van mijn website, loop ik nog wat achter.
      De logging komt niet terecht in de syslog, maar in de log van Domoticz zelf.
      Dus die kan je in Domoticz zelf bekijken.
      Nu werk ik zelf inmiddels niet meer met Domoticz, dus ik kan je even niet zeggen waar je ook alweer moet kijken.

      Gr. Jos

  4. Spanky 9 januari 2022

    Goedemiddag,

    Ik heb uw script als test gedraaid, de backup file van de database die wordt op dat moment keurig gemaakt en geplaatst op de juiste SFTP locatie.

    Als ik de Cronjob toevoeg werkt dit echter niet, ik heb een “test regel” er bij gezet om te kijken of de cron taak werkt, dit is wel het geval. De testfile wordt keurig elke minuut vernieuwd in de tmp map. Het backup script start helaas niet elk half uur op. Heb deze ook op * * * * * gezet, om hem geforceerd elke minuut te laten draaien, zonder succes,

    30 * * * * /home/pi/domoticz/scripts/backup_ftp.sh
    * * * * * /bin/echo “cron works” >> /tmp/testfilemaken

    Ik zie in de service cron status keurig de regel terug.

    Wellicht heeft u nog een idee wat er mis gaat?

    • jos 10 januari 2022 — Berichtauteur

      Hallo Spanky,

      Sorry voor de late reactie, door het verhuizen van mijn website, loop ik nog wat achter.
      Op welke wijze heb je crontab geopend?
      Heb je genoeg ruimte op je geheugenkaart voor het wegschrijven van de temp bestanden voordat deze worden geupload?
      En hoe groot is je totale hoeveelheid aan bestanden? Hoe lang deed de handmatige job er precies over?

      Gr. Jos

      • Spanky 22 januari 2022

        Goedenavond Jos,

        Ben er even uit geweest, sorry voor late reactie.
        de 3 aangemaakte bestanden zijn ongeveer 4 Mb. Handmatige job was binnen 30 seconden voltooid.

        Zodra ik het script via Bash draai, komt alles zoals het script voorschrijft op de juiste plek. (ftp, sftp werkt niet op mijn netwerkshare).

        Ik draai vanaf een 256GB ssd ruim voldoende vrije schijfruimte.

        Zodra ik het via crontab laat lopen gaat het niet goed.
        Ik heb Crontab geopend met commando : crontab -e (optie 1 nano viewer)

        De backup van de domoticz file (backup.db) die zie ik niet vernieuwd worden in de TMP map, dit gebrut dus wel bij bash commando. Er wordt vervolgens niets ingepakt en verplaatst naar de eind bestemming, daarentegen zie ik wel de regel in het domoticz log verschijnen.

Laat een reactie achter

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

© 2022 Steenderen.NET

Thema door Anders Norén