FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Herry-77 am 12 Mai 2019, 10:20:05

Titel: Linux Befehlsabfolge in per notiy ausführen
Beitrag von: Herry-77 am 12 Mai 2019, 10:20:05
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?








Titel: Antw:Linux Befehlsabfolge in per notiy ausführen
Beitrag von: CoolTux am 12 Mai 2019, 11:18:14
Installiere Dir doch logrotate
Titel: Antw:Linux Befehlsabfolge in per notiy ausführen
Beitrag von: amenomade am 12 Mai 2019, 12:12:54
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... ;)
Titel: Antw:Linux Befehlsabfolge in per notiy ausführen
Beitrag von: Wernieman am 12 Mai 2019, 20:11:38
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)
Titel: Antw:Linux Befehlsabfolge in per notiy ausführen
Beitrag von: Otto123 am 13 Mai 2019, 08:48:54
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
Titel: Antw:Linux Befehlsabfolge in per notiy ausführen
Beitrag von: yersinia am 13 Mai 2019, 10:16:35
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 (https://forum.fhem.de/index.php/topic,87669.msg800934.html#msg800934) - aber meiner Vermutung müsste das mit dem User fhem in dem Ordner laufen, der zumindest auch Schreibrechte haben müsste)

Laut man find (http://man7.org/linux/man-pages/man1/find.1.html) 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/)
Titel: Antw:Linux Befehlsabfolge in per notiy ausführen
Beitrag von: Wernieman am 13 Mai 2019, 10:34:56
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 ...
Titel: Antw:Linux Befehlsabfolge in per notiy ausführen
Beitrag von: Herry-77 am 14 Mai 2019, 06:43:15
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.