Ordnerinhalt ohne Bashscript via ftp-Verbindung löschen möglich ?

Begonnen von TomLee, 10 Januar 2022, 14:53:23

Vorheriges Thema - Nächstes Thema

Wernieman

echo "$(date +%T) $?, inotify"
Rate mal, welchen Wert $? hat. Denn von Dir gewünschten, oder den vom erfolgreich durchgeführten date-Befehl ....
- 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

TomLee

Habs angepasst, gefällt mir aber irgendwie nicht das die Zeit nicht vorne in der gleichen Zeile steht:

0, mount erfolgreich, führe backup Befehl aus
18:10:41
2022.12.13 18:10:43 2: Backup with command: tar czf /mnt/FRITZNAS/bla/FHEM/Backups/FHEM-20221213_181042.tar.gz "./file.png" "./log" "./FHEM" "./Abfall.ics" "./MAINTAINER.txt" "./cert.pem" "./file.ps" "./testjson.json" "./fhem.cfg" "./configDB.pm" "./GPL_V2.txt" "./jsontest.json" "./userphonebook.txt" "./UMFHEM.csv" "./fhem.pl" "./README_DEMO.txt" "./FHEM_Statistik.csv" "./debug.log" "./backup" "./contrib" "./lib" "./demolog" "./CHANGED" "./unused" "./key.pem" "./www" "./fhem.cfg.demo" "./docs" "./certs" "./restoreDir" "./einkaufsliste.txt" "./cache" "./alexa-fhem.cfg"
Started the backup in the background, watch the log for details
0, backup Befehl ausgeführt
18:10:43
Setting up watches.
Watches established.
/mnt/FRITZNAS/bla/FHEM/Backups/FHEM-20221213_181042.tar.gz CLOSE_WRITE,CLOSE
Backup done
0, inotify
18:11:52
0, unmount
18:11:52


#!/bin/bash

# parameter(s) <mountpoint1> <backupdirectory>

mopt=$1
bud=$2
mo="mount $1"
umo="umount $1"

if $mo; then
    echo "$?, mount erfolgreich, führe backup Befehl aus"
    echo "$(date +%T)"
    perl fhem.pl 7072 "backup"
    echo "$?, backup Befehl ausgeführt"
    echo "$(date +%T)"
fi

inotifywait -e close_write $(ls ${mopt}${bud}/FHEM-$(date +"%Y%m%d")_[0-9]*.tar.gz)
echo "$?, inotify"
echo "$(date +%T)"

if
    [ $? -eq "0" ]
then
    $umo
    echo "$?, unmount"
    echo "$(date +%T)"
fi


edit:

und hinten anhängen in der gleichen Zeile gefällt mir noch weniger, daher mit dem zusätzlichen echo

edit2:

OK, hier passts immer noch nicht:

echo "$(date +%T)"

if
    [ $? -eq "0" ]

Wernieman

Und warum speicherst Du es dann nicht zwischen?

error=$?
.. irgendwas mit $error machen ....
- 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

TomLee

Ja, das wollt ich im letzten Beitrag eigentlich noch erwähnen, obs irgendwie anders geht wie über den (Um-)Weg Variable.

TomLee

So, nochmal angepasst und ich mein jetzt sollte es passen, aber ich kenn mich ja, besser es schaut wer nochmal drüber:

2022.12.13 22:55:13 0: mount successful, run backup command
2022.12.13 22:55:14 2: Backup with command: tar czf /mnt/FRITZNAS/bla/FHEM/Backups/FHEM-20221213_225513.tar.gz "./einkaufsliste.txt" "./cache" "./alexa-fhem.cfg" "./certs" "./restoreDir" "./docs" "./fhem.cfg.demo" "./unused" "./key.pem" "./www" "./contrib" "./lib" "./demolog" "./CHANGED" "./backup" "./debug.log" "./README_DEMO.txt" "./FHEM_Statistik.csv" "./fhem.pl" "./jsontest.json" "./UMFHEM.csv" "./userphonebook.txt" "./configDB.pm" "./GPL_V2.txt" "./fhem.cfg" "./MAINTAINER.txt" "./cert.pem" "./testjson.json" "./file.ps" "./FHEM" "./Abfall.ics" "./file.png" "./log"
Started the backup in the background, watch the log for details
2022.12.13 22:55:14 0: backup command executed
Setting up watches.
Watches established.
/mnt/FRITZNAS/bla/FHEM/Backups/FHEM-20221213_225513.tar.gz CLOSE_WRITE,CLOSE
Backup done
2022.12.13 22:56:21 0: inotify
2022.12.13 22:56:21 0: unmount


#!/bin/bash

# parameter(s) <mountpoint1> <backupdirectory>

mopt=$1
bud=$2
mo="mount $1"
umo="umount $1"

if $mo; then
    err=$?   
    echo "$(date +"%Y.%m.%d %T") $err: mount successful, run backup command"
    perl fhem.pl 7072 "backup"
    err=$?
    echo "$(date +"%Y.%m.%d %T") $err: backup command executed"
fi

inotifywait -e close_write $(ls ${mopt}${bud}/FHEM-$(date +"%Y%m%d")_[0-9]*.tar.gz)
err=$?
echo "$(date +"%Y.%m.%d %T") $err: inotify"

if
    [ $err -eq "0" ]
then
    $umo
    err=$?
    echo "$(date +"%Y.%m.%d %T") $err: unmount"
fi





Jetzt hab ich keine Ruhe, bis ich die Möglichkeit gefunden habe alle Dateien auszunehmen die kleiner jetzt, minus ein/zwei Sekunden ? sind, sei es mit der jetzigen Umsetzung mit <file>, @<file> oder --exclude <pattern>, dass das Skript jederzeit aufgerufen werden kann und nicht nur einmal am Tag.

Wernieman

Hätte nur eines (was mir auf die schnelle Auffällt) .. wenn nicht gemountet werden kann, wird zwar kein Backup gemacht, aber auf die Datei gewartet .....
- 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

TomLee

Denk das ist jetzt behoben.




Ich mein  8), ich hab eine Lösung mit @<file> hinbekommen, zumindest hat das jetzt drei/vier mal beim testen geklappt.

Kann mir vorstellen (zumindest hab ich davon gelesen, aber nicht hinbekommen) das man das @ auch einfacher anhängen kann wie über ein zusätzliches Array und Schleife.
Ohne das sleep hats nicht immer geklappt (bis ich da drauf gekommen bin  ::) ), die Datei existiert nicht immer sofort ?

Wenn das jemand nachvollziehen würde wär cool.

#!/bin/bash

# parameter(s) <mountpoint1> <backupdirectory>

mopt=$1
bud=$2
mo="mount $1"
umo="umount $1"

if $mo; then
    err=$?
    echo "$(date +"%Y.%m.%d %T") $err: mount successful, run inotify"

    files=$(ls ${mopt}${bud})

    for file in $files; do
        arr+=("@${mopt}${bud}/$file")
    done

    perl fhem.pl 7072 "backup"
    err=$?
    echo "$(date +"%Y.%m.%d %T") $err: backup command"
    #echo "inotifywait -e close_write ${mopt}${bud}/*.tar.gz ${arr[*]}"
    sleep 1
    inotifywait -e close_write ${mopt}${bud}/*.tar.gz ${arr[*]}
    err=$?
    echo "$(date +"%Y.%m.%d %T") $err: inotify"
fi

if
    [ $err -eq "0" ]
then
    $umo
    err=$?
    echo "$(date +"%Y.%m.%d %T") $err: unmount"
fi

TomLee

Zitat von: Wernieman am 25 Oktober 2022, 19:57:31
Vor den umount würde ich ein sync einfügen. sync zwingt den Kernel dazu, die Platte "aktuell" zu machen. Nach dem Sync 2-3 Sec warten und dann erst den unmount.

Einfach so, ja ? Brauch ich das überhaupt noch, wenn ich doch die Bestätigung von inotifywait habe ?

...
then
    sync
    sleep 3
    echo "$(date +"%Y.%m.%d %T") $err: sync"
    $umo
    err=$?
    echo "$(date +"%Y.%m.%d %T") $err: umount"
fi





Was mich jetzt schon ein paar Tage beschäftigt, was ist wenn sich irgendwas ändert während des backup, bspw. es wird was geloggt und man ist so pingelig das diese Werte unbedingt mit in der Sicherung gespeichert werden müssen (ich meine das ist gar nicht so schlimm, beim nächsten backup sind diese Daten ja wieder dabei). Mir fällt nur ein das backup noch mal anzustossen, so lange bis sich "zufällig" nix mehr währenddessen ändert. Stoppen von FHEM bringt vor dem backup ja nix wenn man keine Werte verlieren möchte.

Wernieman

1) Das mit dem Ändern ist ein Grundsätzliches Problem beim Backup, da dieses IMMER Seriell abläuft. Ich würde persönlich kein 2. Anstoßen. Denn ... der gleiche "Wichtige" Wert könnte sich zwischen dem Backup ändern. Wenn er so wichtig ist, mußt Du eben häufiger Backup *) machen. Gehört also in Richtung Backup-Strategie

*) Aber bitte aufpassen, das Du nicht zu häufig ... man kann sich auch "Tot-Backupen"

2)
    sleep 3
    echo "$(date +"%Y.%m.%d %T") $err: sync"

Welchen Error willst Du hier ausgeben?
- 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

TomLee

Danke für deine Gedanken dazu.

ZitatWelchen Error willst Du hier ausgeben?

::) >:( ;D Danke

Schöne Weihnachten

TomLee

#100
Hier gehts ja um ein Bashskript, darum frag ich einfach mal hier.

Hab bisher folgendes Skript:
#!/bin/bash

rm /opt/fhem/www/scripts/epaper/tmp/ffffffffffffff11.png
wget -P /opt/fhem/www/scripts/epaper/tmp/ http://Thomas:XXX3X3XXX@192.168.188.26:8083/fhem/rss/ffffffffffffff11.png
convert -rotate 90 /opt/fhem/www/scripts/epaper/tmp/ffffffffffffff11.png /opt/fhem/www/scripts/epaper/tmp/ffffffffffffff11.png
echo "$?, convert"


Das hab ich erst alle 10 Minuten mit einem Cronjob aufgerufen, das ist mir aber zu oft, falls es keine Änderung gab wird die Datei unnötig oft geholt.

Jetzt hab ich mir überlegt das Skript vlt. mit einem notify aufzurufen, ob das jetzt die Lösung ist weiß ich auch nicht.

defmod not_VH_epaper notify Echo:list_SHOPPING_ITEM:.*|HF_Aussensensor_Vorderhaus:temperature:.* "/opt/fhem/www/scripts/epaper/tmp/epap.sh &"
attr not_VH_epaper disabledAfterTrigger 600
attr not_VH_epaper room Büro->Epaper


Wenn das notify getriggert wird erfolgt die Standardausgabe ja im Logfile:
--2023-01-30 11:44:00--  http://Thomas:*password*@192.168.188.26:8083/fhem/rss/ffffffffffffff11.png
Verbindungsaufbau zu 192.168.188.26:8083 ... verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet ... 401 Authorization Required
Authentifizierung ausgewählt: Basic realm="Login required"
Wiederverwendung der bestehenden Verbindung zu 192.168.188.26:8083.
HTTP-Anforderung gesendet, auf Antwort wird gewartet ... 200 OK
Länge: 10229 (10,0K) [image/png]
Wird in »/opt/fhem/www/scripts/epaper/tmp/ffffffffffffff11.png« gespeichert.

     0K .........                                             100% 35,2M=0s

2023-01-30 11:44:00 (35,2 MB/s) - »/opt/fhem/www/scripts/epaper/tmp/ffffffffffffff11.png« gespeichert [10229/10229]

0, convert


Meine Frage ist jetzt ob man die Standardausgabe irgendwie verhindern/unterdrücken kann / nicht ins Log geschrieben wird ?

Kann da wer was zu sagen bzw. verlinken wo das steht wie sie unterdrückt wird, hier bin ich beim überlesen erstmal nicht fündig geworden ?


edit:
aufgeschrieben hatte ich mir mal das man die Standardausgabe so in der Art verhindern kann:
"/opt/fhem/www/scripts/epaper/tmp/epap.sh &>/dev/null"
"/opt/fhem/www/scripts/epaper/tmp/epap.sh >/dev/null 2>&1"

Die Ausgabe im Log erfolgt aber trotzdem.

Otto123

#101
mir glaubt das immer Keiner: aber Umleitung und Pipe funktionieren bei der Form "bash willi.sh >/dev/null" nicht - oder nicht immer - oder nicht "richtig" - oder "anders".

z.B. schreibt das hier die Ausgabe ins log und löscht den Dateiinhalt
"echo 'willi lustig' >willi.sh"

Du musst verhindern, dass das Script irgendwas ausgibt ;) also im Notfall so: Datei willi.sh
(
echo willi
echo lustig
) >/dev/null

"bash willi.sh" schreibt nicht ins Log.

Edit: und bei wget hilft option -q erstmal ein ganzes Stück
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

Wernieman

Kann da Otto nur Zustimmen. Mach es, das Dein Script nichts mehr schreibt ...

Und noch was:
" .... &" ist eigentlich "Doppeltgemoppelt". Die "" sorgen eigentlich schon für ein "NonBlocking-Scipt"
- 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

TomLee

Zitatz.B. schreibt das hier die Ausgabe ins log und löscht den Dateiinhalt
"echo 'willi lustig' >willi.sh"

Hab ich nachvollzogen und verstanden.
Zitat
Du musst verhindern, dass das Script irgendwas ausgibt ;) also im Notfall so: Datei willi.sh
(
echo willi
echo lustig
) >/dev/null

"bash willi.sh" schreibt nicht ins Log.

Auch nachvollzogen und verstanden.

ZitatEdit: und bei wget hilft option -q erstmal ein ganzes Stück

ein ganzes Stück  ;D Alles ::) ;D  >:( hätte man auch einfach nachlesen können :-X

und hätte den Hinweis überflüssig gemacht  ::):
ZitatMach es, das Dein Script nichts mehr schreibt ...


"/opt/fhem/www/scripts/epaper/tmp/epap.sh"


#!/bin/bash

rm /opt/fhem/www/scripts/epaper/tmp/ffffffffffffff11.png
wget -q -P /opt/fhem/www/scripts/epaper/tmp/ http://Thomas:XXX3X3XXX@192.168.188.26:8083/fhem/rss/ffffffffffffff11.png
convert -rotate 90 /opt/fhem/www/scripts/epaper/tmp/ffffffffffffff11.png /opt/fhem/www/scripts/epaper/tmp/ffffffffffffff11.png




Danke beiden.



TomLee

Hab das nochmal angepasst, weil man ja schon wissen will wenn was schief gelaufen ist.
Wie man nur einen Fehlerfall des wget ausgeben könnte, bin ich bis jetzt noch nicht drauf gekommen, mit dem -q hat man ja einfach alle Ausgaben ausgeknipst oder ?

#!/bin/bash

rm /opt/fhem/www/scripts/epaper/tmp/ffffffffffffff11.png
err=$?
if
    [ "$err" -ne "0" ]
then
    echo "$(date +"%Y.%m.%d %T") $err: rm"
fi

wget -q -P /opt/fhem/www/scripts/epaper/tmp/ http://Thomas:XXX3X3XXX@192.168.188.26:8083/fhem/rss/ffffffffffffff11.png

convert -rotate 90 /opt/fhem/www/scripts/epaper/tmp/ffffffffffffff11.png /opt/fhem/www/scripts/epaper/tmp/ffffffffffffff11.png
err=$?
if
    [ "$err" -ne "0" ]
then
    echo "$(date +"%Y.%m.%d %T") $err: convert"
fi