Od jakiegoś czasu jestem szczęśliwym posiadaniu nowego routera. Oprócz rozlicznych nowoczesnych ( w porównaniu z moim wysłużonym sprzętem ) funkcji, posiada możliwość podłączenia dysku zewnętrznego i ustawienia połączenia FTP. Żal byłoby nie skorzystać z takiej użyteczności do przechowywania kopi Domoticza. Robienie kopi na kartę SD jest proszeniem się o reinstalacje sytemu, więc postanowiłem oddzielić kopie od głównego sytemu plików. Oczywiście można robić je na podłączonym pendrive, ale nie po to umieściłem malinę w obudowie aby wkładać i wyjmować z niej pendriva.
Skrypt kopiujący dane z odczytów na FTP.
Tworzenie kopi bazy danych zaimplementowane jest w Domoticzu, jednakże nie można zautomatyzować procesu archiwizacji jeżeli chodzi o interwał czasowy i lokalizacje.
Poniższy skrypt kopiuje plik domoticz.db do określonego folderu na dysku lokalnym serwera FTP.
#!/bin/bash ## Parametry sieciowe SERVER="192.168.x.x" # Adres IP serwera FTP USERNAME="admin" # Nazwa użytkownika PASSWORD="admin" # Hasło użytkownika DESTDIR="/opt/backup" DOMO_IP="192.168.x.x" # Adres IP Domoticza DOMO_PORT="8080" # Port Domoticza ## Konfiguracja parametrów TIMESTAMP=`/bin/date +%Y%m%d%H%M%S` BACKUPFILE="domoticz_$TIMESTAMP.db" # plik kopi będzie miał nazwę "domoticz_YYYYMMDDHHMMSS.db.gz" BACKUPFILEGZ="$BACKUPFILE".gz ### Zatrzymanie Domoticza, utworzenie kopi zip i ponowne uruchomienie service domoticz.sh stop /usr/bin/curl -s http://$DOMO_IP:$DOMO_PORT/backupdatabase.php > /tmp/$BACKUPFILE service domoticz.sh start gzip -9 /tmp/$BACKUPFILE ### Przesłanie kopia na serwer FTP curl -s --disable-epsv -v -T"/tmp/$BACKUPFILEGZ" -u"$USERNAME:$PASSWORD" "ftp://$SERVER/xxx/xxx/" $ # Ścieżka do katalogu na serwerze FTP ### Usunięcie plików tymczasowych /bin/rm /tmp/$BACKUPFILEDIR ### Zrobione!
Skrypt kopiujący katalog /domoticz na FTP
Jeżeli chcemy wykonać kopie całego katalogu /domoticz i wysłać na serwer możemy użyć tego skryptu.
#!/bin/bash ## Parametry sieciowe SERVER="192.168.x.x" # Adres IP serwera FTP USERNAME="admin" # Nazwa użytkownika PASSWORD="admin" # Hasło użytkownika DESTDIR="/opt/backup" DOMO_IP="192.168.x.x" # Adres IP Domoticza DOMO_PORT="8080" # Port Domoticza ## Konfiguracja parametrów TIMESTAMP=`/bin/date +%Y%m%d%H%M%S` BACKUPFILEDIR="domoticz_x_xxx_$TIMESTAMP.tar.gz" # Zamias xxx możemy wstawić numer kompilacji ### Utworzenie kopi zip tar -zcvf /tmp/$BACKUPFILEDIR /home/pi/domoticz/domoticz/ ### Przesłanie kopia na serwer FTP curl -s --disable-epsv -v -T"/tmp/$BACKUPFILEDIR" -u"$USERNAME:$PASSWORD" "ftp://$SERVER/xxx/xxx/xx/" # Ścieżka do katalogu na serwerze FTP ### Usunięcie plików tymczasowych /bin/rm /tmp/$BACKUPFILEDIR ### Zrobione!
Skrypt kopiujący katalog /domoticz na kartę SD
Dla odważnych poniżej umieszczam skrypt wykonujący kopie katalogu /domoticz oraz bazy danych na karcie SD. Można dopisać kolejny skrypt przenoszący plik kopi do innej lokalizacji albo wysyłać mailem, w odpowiednim interwale czasowym.
#!/bin/bash DOMO_IP="192.168.2.21" # Domoticz IP DOMO_PORT="8080" # Domoticz port ### Konfiguracja parametrów TIMESTAMP=`/bin/date +%Y%m%d%H%M%S` BACKUPFILE="domoticzbackup_$TIMESTAMP.db" BACKUPFILEGZ="$BACKUPFILE".gz #Utworzenie kopi w formacie tar /usr/bin/curl -s http://$DOMO_IP:$DOMO_PORT/backupdatabase.php > /home/pi/domoticz/kopia/$BACKUPFILE tar -zcvf /home/pi/domoticz/kopia/domoticz_$TIMESTAMP.tar.gz /home/pi/domoticz/ #Usunięcie kopi starszych niż 31 dni /usr/bin/find /home/pi/domoticz/kopia/ -name '*.db' -mtime +31 -delete /usr/bin/find /home/pi/domoticz/kopia/ -name '*.tar.gz' -mtime +31 -delet
Uruchomienie skryptów.
Nadajemy prawa do wykonywania pliku
sudo chmod +x /home/pi/xxx/xxx/backup.sh
Cykliczne wykonywanie skryptu
crontab -e
0 1 * * * sudo ~/domoticz/scripts/domoticz_backup.sh # raz dziennie