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
Dateien per Script löschen
- ClemSchn
- Erledigt
-
-
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.
4.
5. Script mit folgenden Inhalt erstellen. Wichtig ist es den Pfad anzupassen und den Wert für die Tage!Code
Alles anzeigen#/bin/bash # clearTemp.sh # 07.02.2014 11:59 # Alexander Killert # SETTINGS # exectue script on folder, ABSOLUTE PATH !!! executionFolder="/path/to/execution/folder" # list of files in folder folderList="$executionFolder/folderList.log" # list of deleted files deletedList="$executionFolder/deletedList.log" # list all files in folder include subfolders -> for log find $executionFolder -type f > $folderList # delete files older than ... days THAN delete empty folders find $executionFolder/* -mtime +14 -exec rm {} \; && find $executionFolder/* -type d -empty -exec rmdir {} \; # protocol which files where deleted # line by line from $folderList while IFS= read -r LINE do # file does not exist -> "! -f ..." if [ ! -f "$LINE" ] then # log file, that was deleted echo $LINE >> $deletedList fi done < $folderList # EOF
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
-
-
Merci, dann werde ich mich mal versuchen.
Schönen Sonntagabend noch!
-
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:
Code
Alles anzeigen#/bin/bash # clearTemp.sh # 07.02.2014 11:59 # Alexander Killert # SETTINGS # exectue script on folder, ABSOLUTE PATH !!! executionFolder="/share/cams" # list of files in folder folderList="$executionFolder/folderList.log" # list of deleted files deletedList="$executionFolder/deletedList.log" # list all files in folder include subfolders -> for log find $executionFolder -type f > $folderList # delete files older than ... days THAN delete empty folders find $executionFolder/* -mtime +5 -exec rm {} \; && find $executionFolder/* -type d -empty -exec rmdir {} \; # protocol which files where deleted # line by line from $folderList while IFS= read -r LINE do # file does not exist -> "! -f ..." if [ ! -f "$LINE" ] then # log file, that was deleted echo $LINE >> $deletedList fi done < $folderList # EOF
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 ExplorerDie corntab danach mit
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?
-
-
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:
Coderm: /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 :
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: ) 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ß.CodeCMD_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
und
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:
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. -
-
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:
Code
Alles anzeigen[~] # #!/bin/bash [~] # # last edit CDH 2016-01-30_16:10h [~] # # delete old images from security cameras [~] # [~] # MTIME=5 [~] # [~] # DESTA="/share/Recordings/ueberwachung" [~] # DESTB="/share/Recordings/ueberwachung2" [~] # [~] # [~] # /usr/bin/find $DESTA/* -mtime +$MTIME -exec rm {} \; BusyBox v1.01 (2016.03.10-19:12+0000) multi-call binary Usage: find [PATH...] [EXPRESSION] Search for files in a directory hierarchy. The default PATH is the current directory; default EXPRESSION is '-print' EXPRESSION may consist of: -follow Dereference symbolic links. -name PATTERN File name (leading directories removed) matches PATTERN. -print Print (default and assumed). -type X Filetype matches X (where X is one of: f,d,l,b,c,...) -perm PERMS Permissions match any of (+NNN); all of (-NNN); or exactly (NNN) -mtime TIME Modified time is greater than (+N); less than (-N); or exactly (N) days [~] # /usr/bin/find $DESTB/* -mtime +$MTIME -exec rm {} \;
Und in den entsprechenden Verzeichnissen wird nichts gelöscht.
-
-