Weil ich gerade hier im Forum etwas über Backups gelesen habe und gerade mein Backup-Script um eine FTP-Upload Funktion erweitert habe - wollte ich mal wieder was an die Community zurückgeben!
Das originale Script ist eigentlich von @Silberstreifen und wurde damals hier Frage an Raspberry 3 Benutzer - #12 von Silberstreifen veröffentlicht!
Ich habe das über all die Jahre immer genutzt und ab und zu etwas angepasst! Das Script lass ich per Ereignis immer nachts um 3 Uhr laufen In den letzten 5 Jahren hat es vielleicht 3 mal seinen Dienst per Meldung verweigert
Ich musste es auch nie wieder zurückspielen - jedenfalls nicht in Gänze, immer nur Teile - und das hat super funktioniert!
Also wer Interesse hat - einfach der Umgebung anpassen (Pfade und FTP Verbindungsdaten) und hoffentlich glücklich sein!
<?php
################################################################################
# Script: System.Backup.ips.php
# Version: 1.3.20221208
# Author: Heiko Wilknitz (@Pitti)
# Original von Silberstreifen V2.0 - 16.10.2016
#
# Erstellt einmal täglich ein Backup von Symcon.
#
# Einspielen:
# cd \
# sudo tar -xvf /<path to backup/var.symcon.<day>.tar
#
# ------------------------------ Changelog ---------------------------------
#
# 17.12.2018 (v1.1) - Option -P zum tar Befehl hinzugefügt
# 06.01.2021 (v1.2) - UTF-8 Umstellung, Vereinheitlichung, Erfolgsmeldung
# 08.12.2022 (v1.3) - FTP Upload zum NAS hinzugefügt
#
# ------------------------------ Konfiguration ---------------------------------
#
# Backup-Verzeichnis festlegen
# hier das Backupverzeichnis Deines gemounteten NAS eintragen
$base = '/home/pi/Backup';
$day = date("N");
#
################################################################################
switch (@$_IPS['STEP']) {
#----------------------------------------------------------------------------
# Server aufwecken falls Server schläft
#----------------------------------------------------------------------------
default:
// IPS_LogMessage("Backup", "Backup gestartet");
for ($i=0;$i<10;$i++) {
system(" [ -d $base ]", $return_1);
if (!$return_1) break;
IPS_Sleep(3000);
}
if ($i >= 10) {
IPS_LogMessage("Backup", "Backup konnte nicht gestartet werden!");
return;
}
IPS_RunScriptEx($_IPS['SELF'], ['STEP' => 1]);
return;
#----------------------------------------------------------------------------
# Symcon /var/lib-Verzeichnis sichern; Basisdaten zusammenstellen
#----------------------------------------------------------------------------
case 1:
$target = "/var/lib/symcon/";
$back = "$base/var.symcon.$day.tar";
$task = "tar -cPf $back $target";
$return_0 = false;
if (file_exists ($back)) {
system("rm $back", $return_0);
}
if ($return_0) {
IPS_LogMessage("Backup", "Löschen $back fehlerhaft!");
}
// Backup durchführen
system($task, $return_0);
if ($return_0) {
IPS_LogMessage("Backup", "Backup $target fehlerhaft!");
}
else {
if(!ftp_upload($base, $back)) {
IPS_LogMessage("Backup", "FTP Upload von $back fehlerhaft!");
}
}
IPS_RunScriptEx($_IPS['SELF'], ['STEP' => 2]);
return;
#----------------------------------------------------------------------------
# Symcon /usr/share-Verzeichnis sichern; Basisdaten zusammenstellen
#----------------------------------------------------------------------------
case 2:
$target = "/usr/share/symcon/";
$back = "$base/usr.symcon.$day.tar";
$task = "tar -cPf $back $target";
$return_0 = false;
if (file_exists ($back)) {
system("rm $back", $return_0);
}
if ($return_0){
IPS_LogMessage("Backup", "Löschen $back fehlerhaft!");
}
// Backup durchführen
system($task, $return_0);
if ($return_0) {
IPS_LogMessage("Backup", "Backup $target fehlerhaft!");
}
else {
if(!ftp_upload($base, $back)) {
IPS_LogMessage("Backup", "FTP Upload von $back fehlerhaft!");
}
}
IPS_RunScriptEx($_IPS['SELF'], ['STEP' => 3]);
return;
#----------------------------------------------------------------------------
# Symcon Programm sichern; Basisdaten zusammenstellen
#----------------------------------------------------------------------------
case 3:
$version = IPS_GetLiveUpdateVersion();
$version = explode(",",$version)[0];
$version = IPS_GetKernelVersion()."-".$version;
$target = "/usr/bin/symcon";
$back = "$base/symcon.$version.tar";
$task = "tar -cPf $back $target";
// Backup durchführen
if (file_exists ($back)){
// IPS_LogMessage("Backup","Backup $back existiert bereits ;-)");
IPS_LogMessage("Backup","Backup erfolgreich!");
}
else {
system($task, $return_0);
if ($return_0){
IPS_LogMessage("Backup","Backup $target fehlerhaft!");
}
else{
if(!ftp_upload($base, $back)) {
IPS_LogMessage("Backup", "FTP Upload von $back fehlerhaft!");
}
else {
IPS_LogMessage("Backup","Backup erfolgreich!");
}
}
}
return;
}
function ftp_upload($base, $file)
{
$remote = str_replace($base, '/Backup/symcon', $file);
$server = "ftpserver"; // HIER Server eintragen (Name oder IP)
$uname = "ftpuser"; // HIER FTP User eintragen
$passwd = "ftppasswd"; // HIER FTP Kennwort eintragen
// set up basic connection
$con = ftp_connect($server);
// login with username and password
$res = ftp_login($con, $uname, $passwd);
// upload a file
if (ftp_put($con, $remote, $file, FTP_BINARY)) {
$res = true;
} else {
$res = false;
}
// close the connection
ftp_close($con);
// return result
return $res;
}
################################################################################
?>
Gruß Heiko