Hallo zusammen.
Ich habe irgendwo hier im Forum mal etwas darüber gelesen, ältere Backups zu löschen.
Leider habe ich damit ein Problem.
Im Terminal funktioniert dies hier tadellos:
ls -A "/mnt/nas/raspberry/fhem/backups/" | grep -c ".tar.gz$"
(ergibt eine Zahl)
Aber in Perl liefert qx() keinen Rückgabewert, das heißt $buCount ist ein Leerstring.
sub nasDeleteFiles(){
my $buDir = AttrVal("global", "backupdir", undef);
my $buCount = qx(ls -A "$buDir" | grep -c ".tar.gz$");
...
...
...
}
Ich stehe also mal wieder auf dem Schlauch und benötige eure Hilfe. ???
EDIT: Ich hätte noch warten sollen mit meinem Post.
Ich habe eine Lösung gefunden, die ich zwar kompliziert finde, aber sie funktioniert.
Das Problem waren die Anführungszeichen...
my $arg = 'ls -A'. ' "' . $buDir . '" ' . '| grep -c ' . '".tar.gz$"';
my $buCount = qx($arg);
Alternative: Schnipsel aus meiner sub
my $BackupDir = AttrVal("global", "backupdir", "backup");
$BackupDir.="/FHEM-*.tar.gz";
my $BackupsCurrent = qx(ls -A $BackupDir | wc -l);
Zitat von: Otto123 am 05 April 2022, 19:38:41
Alternative: Schnipsel aus meiner sub
my $BackupDir = AttrVal("global", "backupdir", "backup");
$BackupDir.="/FHEM-*.tar.gz";
my $BackupsCurrent = qx(ls -A $BackupDir | wc -l);
Danke, das funktioniert.
Jetzt die nächste Frage:
qx(mount /mnt/nas);
fhem("backup");
qx(umount /mnt/nas);
Wann wird
umount ausgeführt?
Erst dann, wenn backup fertig ist? Das dauert ja etwas...
Oder muss ich das irgendwie abfragen, bevor
umount gemacht wird?
Die gleiche Frage kommt auf, wenn ich automatisiert ein Raspberry Image mit
dd machen möchte, also schematisch so:
qx(systemctl stop fhem);
dd ...
qx(systemctl start fhem);
fhem macht backup im Hintergrund und läuft weiter. So wie Du das skizziert hast wird das nix. Mit dem Abfragen wird es mMn auch schwierig, weil es mW keinen Event gibt wenn backup fertig ist. Es gibt lediglich den Eintrag im Log, ob man daraus etwas machen kann, weiß ich nicht.Stimmt nicht, so sieht er aus:
2022-04-06 22:23:51 Global global backup done
Ich war selbst zu faul in diesen Prozess einzugreifen, d.h. ich triggere backup und lasse FHEM machen. Irgendwann zu einem passenden Zeitpunkt später führe ich ein shell Script aus (Pseudocode):
mount NAS
rsync /opt/fhem/backup /mnt/nas/sicherung
umount NAS
Den Fortschritt dieses Scripts (https://github.com/heinz-otto/raspberry/blob/master/backupFhem.sh) dokumentiere ich in FHEM und wenn das ganze fertig ist, wird meine Aufräumroutine gestartet.
Der Aufruf in FHEM passiert einfach per at oder so "bash backupFhem.sh . /mnt/Sicherung"
Ich habe lieber ein lokales Backup als gar keins und dazu eine Sicherheitskopie extern. ;)
Raspberry Image mache ich nicht, aber dein Code sieht nach "selbst am Haar aus dem Sumpf hochziehen" aus. Die letzte Zeile wird ja nicht ausgeführt :)
Es gibt schon ein Event, wenn backup (also fhem backup) fertig ist.
Ich mache das so, also backup per at aufrufen und dann auf das Event Backup-done "warten", dann mounten und wegkopieren...
global:backup.done
Gruß, Joachim
Zitat von: Otto123 am 06 April 2022, 15:01:30
Ich habe lieber ein lokales Backup als gar keins und dazu eine Sicherheitskopie extern. ;)
Ich möchte Schreibzugriffe auf die SD-Karte minimieren und deshalb das Backup und demnächst auch alle Logfiles direkt auf NAS schreiben.
Zitat von: Otto123 am 06 April 2022, 15:01:30
Die letzte Zeile wird ja nicht ausgeführt :)
Stimmt - wenn man das tatsächlich aus fhem heraus machen würde. ???
Aber mit einem per cronjob gestarteten Shell Script sollte das möglich sein.
Zitat von: DocCyber am 06 April 2022, 12:43:30
qx(systemctl stop fhem);
dd ...
qx(systemctl start fhem);
Wie sollte das eigentlich funktionieren? Innerhalb von FHEM stoppst Du FHEM und erwartest, das er dann weitermacht?
Edit:Du warst schneller, aber trotzdem jetzt abgesendet.
dd macht übrigens leicht inkonsistente Backups, wenn irgendwelche Deamons (oder das System) noch läuft. Da reicht es meistens nicht, nur fhem runterzufahren ... aber zu dem Thema haben wir hier schon viel im Forum geschrieben
Zitat von: Wernieman am 06 April 2022, 17:25:26
Wie sollte das eigentlich funktionieren? Innerhalb von FHEM stoppst Du FHEM und erwartest, das er dann weitermacht?
Kann nicht funktionieren - hab's zwischenzeitlich schon korrigiert ...
Zitat von: MadMax-FHEM am 06 April 2022, 17:07:51
Es gibt schon ein Event, wenn backup (also fhem backup) fertig ist.
global:backup.done
Ah ... gut zu wissen. Notify bei backup.done zwecks 'umount'
und wie immer: Danke an alle Helfenden. :)
Zitat von: Wernieman am 06 April 2022, 17:25:26
dd macht übrigens leicht inkonsistente Backups, wenn irgendwelche Deamons (oder das System) noch läuft. Da reicht es meistens nicht, nur fhem runterzufahren ... aber zu dem Thema haben wir hier schon viel im Forum geschrieben
Vielen Dank - muss ich nachlesen.
@Joachim Danke für die Info: :D irgendwie hatte ich schon mal gesucht und mir gemerkt da issnix ::)
2022-04-06 22:23:51 Global global backup done
Zitat von: DocCyber am 06 April 2022, 17:24:32
Ich möchte Schreibzugriffe auf die SD-Karte minimieren und deshalb das Backup und demnächst auch alle Logfiles direkt auf NAS schreiben.
Ich glaube schreiben ist eigentlich nicht das Problem. Deswegen lösche ich die Backup nicht nach dem wegsynchronisieren. Ich lasse die SD Card erstmal bis auf 66% Füllstand vollschreiben, dann lösche ich bis auf die letzten. Damit will ich vermeiden, dass immer wieder auf die gleiche Stelle geschrieben wird.