Dateien per Script löschen

  • Guten Tag,
    auf meinem NAS werden von zwei Kameras Bilder per FTP abgespeichert wenn die Kameras per Bewegungsmelder ausgelöst werden. Bisher habe ich die Bilder immer manuell gelöscht. Das würde ich gerne automatisieren indem alle Bilder älter als drei Tage automatisch ausgewählt und gelöscht werden.
    Da ich das Qnap nur per QTS administrieren kann (keine Ahnung von Telnet, Scripting und Co.) würd eich gerne wissen, ob es da eine Möglichkeit gibt.
    Vielen Dank und viele Grüße
    Clemens

  • Hallo Clemens,


    1. Welches NAS?


    2. QPKG laden und manuell via QTS installieren


    Quelle http://forum.qnap.com/viewtopic.php?f=351&t=100843
    3.

    Code
    opkg update


    4.

    Code
    opkg upgrade


    5. Script mit folgenden Inhalt erstellen. Wichtig ist es den Pfad anzupassen und den Wert für die Tage!



    Quelle Script http://www.ikt-blog.de/linux-s…schen-aelter-als-14-tage/


    6. Jetzt das Script noch via Cron regelmäßig aufrufen/ausführen und fertig.


    Bitte Vorsicht walten lassen!!!


    Grüße
    Christian

  • Hallo Christian,


    Ich habe das TS 459 Pro


    Qnapware habe ich installiert.


    Schritt 3 und 4 verstehe ich nicht richtig.


    Schritt 5 Wie bekomm eich den richtigen Pfad heraus?


    Schritt 6 Cronjob geht nur mit Telnet?


    Vielen Dnak für Deine Hilfe


    Gruß


    Clemens

  • Hallo Clemens,


    für 3 +4 musst du dich via z.B. Putty mit dem NAS auf der Konsole verbinden siehe hier http://forum.qnapclub.de/viewtopic.php?f=80&t=8700 und dann jeweils die Zeile einfügen und mit Enter bestätigen.


    Zitat von "ClemSchn"

    Schritt 5 Wie bekomm eich den richtigen Pfad heraus?

    Wo liegen die Dateien, die regelmäßig gelöscht werden sollen?


    Zitat von "ClemSchn"

    Schritt 6 Cronjob geht nur mit Telnet?

    Geht auch via Putty siehe weiter oben. Such dazu mal hier im Forum.


    LG
    Christian

  • die Daten liegen auf einem Freigabevolumen namens recordings. Das ist nicht des Problem. Nur wie ist der absolute Pfad?


    Viele Grüße


    Clemens

  • Ich bin ein Anfänger in Sachen NAS.
    Brauche auch diese Funktion um Daten der Videokamera nicht ständig manuell löschen zu müssen.


    Kann jemnad meine Angaben überprüfen?


    Mein Ordner wo der Script liegt ist home.
    Die Dateien die gelöscht werden sollen liegen in Ordner cams.
    Der Script heisst clearTemp.sh.


    Der Cron sieht so aus:


    0 0 * * * /home/clearTemp.sh


    Mein Script sieht dann so aus:




    Hoffe ich habe alles richtig gemacht oder?


    Bei dem crontab -e kann ich mich mit dem Kursor nicht richtig bewegen und schreiben, daher kann ich hier keine neue Zeile erstellen.


    Was mache ich falsch?

  • Die crontab würde ich direkt mit einem Editor bearbeiten, zB mit WinSCP + Notepad++ .
    Notepad++ zum Editieren
    WinSCP für den SSH-Zugriff mit Dateizugriff wie im Explorer


    Die corntab danach mit

    Code
    crontab /etc/config/crontab


    neu einlesen, das reicht.


    Den Ordner /home für dein Script ist ungünstig gewählt, da dieser bei jedem Bootvorgang mit Basisdaten aus dem Flash wiederhergestellt wird.


    Das find Commando unterstützt in der vorhandenen Version kein -exec Kommando.
    Das konntest du damals mittels Optware nachrüsten, aber inzwischen nicht mehr verfügbar.

  • Mit dem WinSCP habe ich es gut hinbekommen können (gerade getestet) aber wie du schreibst wird das -exec Kommando bei mir nicht unterstützt- schade :(


    Gibt es trotzdem eine Möglichkeit wie ich die Sache lösen könnte?

  • Evtl. die gefundenen Dateien in einer Dateien protokollieren,
    diese danach Zeile für Zeile auslesen
    und die entsprechende Datei löschen.


    Code
    find $executionFolder/* -mtime +5 > /tmp/delete.txt
    FILES=$(cat /tmp/delete.txt)
    	for f in $FILES
    	do
    		rm $f
    	done
  • Genial!
    Es funktioniert :thumb:


    Vielen Dank für deine Hilfe.


    Ich habe es manuell mit putty ein paar Mal ausgeführt und einmal eine Rückmeldung bekommen die ich nicht deuten kann:



    Code
    rm: /share/cams/@Recycle: is a directory
    [~] # rm: /share/cams/@Recycle: is a directory
    -sh: rm:: command not found



    Es kann aber auch sein dass ich zufällig noch was an der Tastatur gedrückt habe...blutiger Anfänger :)


    Auf jeden Fall muss sich jetzt zeigen ob der cronjob die Sache übernimmt und es auch automatisch funktioniert.


    Ich habe noch eine Frage an den Meister :D :


    Wo kann ich mit Hilfe des WINSCP die Log Datei einer Qnap einsehen?
    Im var/log liegt die Datei messages die aber leer ist.
    Ich dachte es liegt an der TS-112P "abgespeckten Version" aber meine neue (seit heute :thumb: :qnap: ) HS-251+ hat auch nichts abgespeichert.


    Muss man das Protokollieren womöglich erst einschalten?
    Dann würde mich interessieren wie.

  • Was ich in dem Script-beispiel vergessen habe,
    für die Ausführung für crontab oder andere automatisch gestartete Scripte sollten zu den Befehlen der volle Pfad mit angegeben werden.
    Dazu führe ich am Anfang alle notwendige Befehle auf und weise diese einer Variable zu,
    damit man bei Pfadanpassungen nur einmal den PFad korrigieren muß.


    Code
    CMD_FIND="/usr/bin/find"CMD_CAT="/bin/cat"CMD_RM="/bin/rm"${CMD_FIND} $executionFolder/* -mtime +5 > /tmp/delete.txtFILES=$(${CMD_CAT} /tmp/delete.txt)   for f in $FILES   do      ${CMD_RM} "$f"   done


    Zitat von "lukas_09"

    Ich habe es manuell mit putty ein paar Mal ausgeführt und einmal eine Rückmeldung bekommen die ich nicht deuten kann:


    hast du evtl. in den Pfaden der Dateien ein Leerzeichen ?
    Dann hilft es meistens, dass man den PFad in "" setzt, so wie oben im neuen Beispiel.


    Die Logdaten werden bei QNAP in einer Datenbank gespeichert,
    die du mit

    Code
    /sbin/log_tool


    und

    Code
    /sbin/conn_log_tool


    abrufen.

  • Guten Tag,


    ich möchte nochmal auf dieses Thema zurückkommen.


    Ich habe jetzt ein funktionsfähiges Script, zumindest funktioniert das bei direkter Ausführung über ssh.


    Das Script heißt del-ueberwachung-imgs.sh und liegt in einem gesonderten Verzeichnis:


    Bash
    #!/bin/bash# delete old images from security camerasMTIME=5DESTA="/share/Recordings/ueberwachung"DESTB="/share/Recordings/ueberwachung2"find $DESTA/* -mtime +$MTIME  -exec rm {} \;find $DESTB/* -mtime +$MTIME  -exec rm {} \;


    Den crontab habe ich wie folgt geändert:


    Code
    3 2 * * * sh -c "/share/admin/script/del-ueberwachung-imgs.sh


    Nach Neustart des NAS ist die Zeile im Crontab auch noch enthalten. Also scheint von dieser Seite alles in Ordnung zu sein.


    Ist an dem Scripting noch etwas falsch oder habe ich mir hier alles richtig zusammengesucht?


    Vielen Dank für eine Rückmeldung und ein schönes Osterfest

  • Wenn du Scripte automatisch bzw. vom System ausführen lassen möchtest,
    solltest du zu den verwendeten Befehlen immer den kompletten Pfad angeben,
    also bei "find" stattdessen "/usr/bin/find" angeben.

  • Ist es richtig, dass wenn ich das wie unten in das Script übernehme das Script nicht mehr direkt per ssh ausgeführt werden kann?


    Code
    /usr/bin/find $DESTA/* -mtime +$MTIME  -exec rm {} \;
    /usr/bin/find $DESTB/* -mtime +$MTIME  -exec rm {} \;
  • Nein, das macht dann kein Unterschied.
    Der Unterschied zu der direkten Ausführung ist nur, das die Befehle/Programme anhand von vorher festgelegten Suchpfaden ermittelt werden,
    die bei der automatischen Ausführung nicht zur Verfügung stehen.


    Welche Pfade bei der direkten Ausführung durchsucht werden,
    kannst du dir mit "echo $PATH" anschauen.

  • Ich bekomme aber bei direkter Ausführung folgende Rückmeldung:


    Und in den entsprechenden Verzeichnissen wird nichts gelöscht.

    Einmal editiert, zuletzt von dr_mike () aus folgendem Grund: Quote durch Codeblock ersetzt.