[GELÖST!] qx liefert keinen Rückgabewert

Begonnen von DocCyber, 05 April 2022, 19:03:20

Vorheriges Thema - Nächstes Thema

DocCyber

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);
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

Otto123

Alternative: Schnipsel aus meiner sub
my $BackupDir = AttrVal("global", "backupdir", "backup");
$BackupDir.="/FHEM-*.tar.gz";
my $BackupsCurrent = qx(ls -A $BackupDir | wc -l);
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

DocCyber

#2
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);
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

Otto123

#3
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 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 :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

DocCyber

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.
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

Wernieman

#6
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
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

DocCyber

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 ...
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

DocCyber

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'
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

DocCyber

und wie immer: Danke an alle Helfenden.  :)
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

DocCyber

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.
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

Otto123

#11
@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.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz