Linux Befehlsabfolge in per notiy ausführen

Begonnen von Herry-77, 12 Mai 2019, 10:20:05

Vorheriges Thema - Nächstes Thema

Herry-77

Hallo
ich möchte gern per  Dummy-Schalter manuell alle älteren LOG Files in einem Ordner löschen.

Wenn ich in der Linux Shell meines Raspberrys also folgenden Befehl absetze, sudo find /opt/fhem/log/* -mtime -7 -exec rm {} \; werden in meinem FHEM LOG Ordner alle Files die älter als 7 Tage sind gelöscht. Ohne Sudo muß ich das Löschen jedes Files manuelle in der Shell bestätigen. (
rm: remove write-protected regular file '/opt/fhem/log/Wetterdaten-2019-05-12.log'? y
)

Wenn ich nun mein Dummy "logdelte" mit einem Notify anlege und den LINUX Befehl  hinterlegte logdelete:on { system("sudo find /opt/fhem/log/* -mtime -2 -exec rm {} \;")}
, quittiert FHEM mir das brav mit einem -1 und es passiert leider nichts. Wenn ich dann testhalber eine anderen Linuxbefehl absetze z.B. logdelete:on { system("cat > /opt/fhem/log/test100.txt")} dann funktioniert alles und FHEM führt den Befehl aus und schreibt die Datei test100.txt in den FHEM/Log Ordner.

Nun hab ich schonmal irgendwo gelesen dass FHEM wohl Probleme mit der Ausführung von sudo hat. Könnte es daran liegen?
Oder ist der Linux-Befehl oben eine Zusammensetzung aus mehren Befehlen und kann in FHEM deshalb nicht direkt ausgeführt werden, so dass man die Befehle vielleicht eine Batch file schreiben und ausführen muß?
Oder liegt es hier an eine Rechte-Problem. Der Besitzer ist FHEM und die Logs haben die Rechte 0777?









CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

amenomade

ZitatNun hab ich schonmal irgendwo gelesen dass FHEM wohl Probleme mit der Ausführung von sudo hat. Könnte es daran liegen?
Also... das ist kein Problem, sondern gewünscht ;)
Um sudo zu können, muss ein User (hier der fhem User) auch sudoer sein.
https://www.raspberrypi.org/documentation/linux/usage/root.md

Auf eigene Gefahr... ;)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Wernieman

Ansonsten kannst Du auch rm sagen, da er nicht mehr Nachfragen soll. Ist auf jedem Fall sicherer, als sudo!

Ich würde mal auf "-f" tippen, gucke aber lieber selber in die man-Pages: (man rm)
- 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

Otto123

Zitat von: Herry-77 am 12 Mai 2019, 10:20:05
Oder ist der Linux-Befehl oben eine Zusammensetzung aus mehren Befehlen und kann in FHEM deshalb nicht direkt ausgeführt werden, so dass man die Befehle vielleicht eine Batch file schreiben und ausführen muß?
Hi,

wenn es mehr als ein Befehl ist, würde ich immer alles in ein Scriptfile schreiben und dieses dann in FHEM aufrufen.
Da kann man testen ob das Script funktioniert und das Script ist definiert in FHEM aufrufbar. Bei allem anderen spielen die unterschiedlichen Hochkomma, Interpretation von Sonderzeichen, Auflösung von Variablen, Behandlung von Stdout usw eine "komplizierte" Rolle.

Also wenn es kein Rechteproblem ist könnte rm -f helfen. Aber eigentlich sollte es keinen Unterschied machen ob mit oder ohne sudo aufgerufen. Wenn nur sudo geht, dann stimmen die Rechte nicht.
Zitat-f, --force
              ignore nonexistent files and arguments, never prompt
FHEM hat kein Problem mit sudo, man muss es nur ordentlich einrichten. Und man sollte genau wissen was man tut: sudo ist meist ein dünnes Brett, welches gern gebohrt wird.

Gruß Otto
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

yersinia

#5
Kurze Frage, find bietet doch selbst die Option delete an, oder nicht?
find /opt/fhem/log/ -type f -mtime +7 -delete
(Ob das mit den Rechten passt, kann ich nicht sagen - ich nutze das um den Backup-Ordner sauber zu halten - aber meiner Vermutung müsste das mit dem User fhem in dem Ordner laufen, der zumindest auch Schreibrechte haben müsste)

Laut man find erwartet mtime eine Zahl n weil diese mit 24h multipliziert wird. Demnach wäre -7 eigentlich unlogisch (würde dann in Zukunft liegen, oder?).
Zitat-mtime n
              File's data was last modified n*24 hours ago.  See the
              comments for -atime to understand how rounding affects the
              interpretation of file modification times.

-atime n
              File was last accessed n*24 hours ago.  When find figures out
              how many 24-hour periods ago the file was last accessed, any
              fractional part is ignored, so to match -atime +1, a file has
              to have been accessed at least two days ago.

EDIT
Ich hatte auch mal dies gefunden, aber bisher nicht getestet (behält immer die neusten 10 files und löscht den rest):
ls -1t | tail -n +11 | xargs rm -f
ZitatWhere,

    ls : List directory contents.
    -1t : 1(Number one) indicates that the output of ls should be one file per line. t indicates sort contents by modification time, newest first.
    tail : Output the last part of files.
    -n +11 : output the last NUM lines, instead of the last 10; or use -n +NUM to output starting with line NUM
    xargs : Build and execute command lines from standard input.
    rm -f : Remove files or directories. f indicates ignore nonexistent files and arguments, never prompt. It means that this command won't display any error messages if there are less than 10 files.
    | – It is a pipeline. It is generally a sequence of one or more commands separated by one of the control operators | or |&.
(Quelle: https://www.ostechnix.com/find-delete-oldest-file-x-files-directory/)
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Wernieman

#6
Das + oder - bei find bedeutet, icnl. vor (oder nach) dem Alter.

Ansonsten würde ein "ind /opt/fhem/log/ -type f -mtime 7"  (alsoi ohne +/-) nur Dateien finden, die genau an exakt 7 *24 Stunden Bearbeitet wurden (mtime = Modifikation-Time). Also auch keine älteren ...
- 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

Herry-77

find /opt/fhem/log/ -type f -mtime +7 -delete

Super das hat funktioniert.
Warum die ursprüngliche Befehlszeile aus FHEM ( egal ob mit oder ohne rm -f)nicht geht wird wohl ein Rätsel bleiben.

Ich danke euch.