[Hilfe benötigt] Cronjob anlegen um Täglich 50 GB zu löschen

  • Hallo Qnaper und Mitleser, mein Problem sieht folgendermaßen aus:


    Ich habe eine IP Kamera mit Bewegungserkennung und diese nimmt 7/24 auf.
    Nach der Aufnahme lädt die Kamera die Dateien selbstständig per FTP auf /share/CACHEDEV1_DATA/ReoLink/reolink/record_nvr/channel1/2022/08/27 hoch und Erstellt selbstständig das Jahr/Monat/Tag.


    Da hier aber schon mal mehr als 1070 Aufnahmen pro Tag ( 48,9 GB ) anfallen und löschen von älteren Aufnahmen per Hand umständlich ist, möchte ich das gerne mit einem Cronjob auf meiner TS-215 anlegen.

    Gefunden habe ich schon, dass ich eine Datei erzeugen muss reolink.sh mit Inhalt
    [ Was muss in der Datei stehen? ]

    Und das ich dann über Putty/SSH folgendes anlegen soll:
    Ausführen: vi /etc/config/crontab
    alle Dateien in einem Verzeichnis [variable $DIR ] die älter als 7 Tage sind löschen
    [ 0 2 * * * /mnt/ext/usr/bin/find ??? -type f -mtime +7 –delete ]
    Neueinlesen: crontab /etc/config/crontab


    Leider habe ich kaum eine Ahnung, weshalb ich mich freuen würde, wenn ihr mir hier helfen könntet. Das Suchen nach Antworten, ob hier oder im Netzt hat mir nicht geholfen, um das selber umzusetzen.
    Da ich nicht weiß was in der Datei stehen soll, welchem Verzeichnis ich es dann ablegen soll.
    Und was ich an die Stelle ??? schreiben soll? /reolink oder den langen Weg bis …/channel1/


    Fragen über Fragen, Danke für einen Hinweis oder die Hilfe um das umzusetzen.


    Natürlich habe ich QNAP schon viele Jahre im Einsatz, aber das brauchte ich bis 2021 nicht selber umsetzen,

    ungünstigerweise hat der Kamera Hersteller im Dezember 2021 die Hard- und Software verändert und mir damit die Möglichkeit genommen, dass nach 7 Tagen der Tag 1. Gelöscht wird usw.


    Grüße HSE24 (Thomas)

  • Du kannst eine reolink.sh (oder wie immer Du sie nennen möchtest) anlegen und darin den Befehl zum löschen Deiner 7 Tage alten Dateien unterbringen. In der crontab würdest Du dann zum gewünschten Zeitpunkt diese Datei (muss ausführbar gemacht werden chmod +x reolink.sh) aufrufen.


    Du kannst die reolink.sh aber auch einfach vergessen und in der crontab direkt den Befehl zum löschen aufrufen.


    Ich mache das auf einem Linuxserver ähnlich: Über crontab wird täglich ein Backup gestartet, ist das durchgeführt folgt (&&) der Befehl zum Löschen der Backups, die älter sind als x Tage.


    Der Befehl würde in etwas so lauten


    Code
    find /pfad/zu/deinen/dateien -ctime +7 -exec rm {} \;


    Das ist kurz genug um es direkt in die crontab zu schreiben, eine extra reolink.sh ist überflüssig.


    Ich meine allerdings gelesen zu haben, dass es etwas müßig ist auf einem qnap die crontab zu ändern. Wenn ich mich richtig erinnere, sind die Änderungen nach einem Neustart oft weg!?


    Viel Glück dabei!

    Einmal editiert, zuletzt von eol66 ()

  • Nein, falsche Vorgehensweise.

    Nicht den Befehl find in die crontab schreiben.

    Du musst alles in die Script Datei schreiben, dann testen, ob die Datei den gewünschten Erfolg herstellt (löschen der alten Dateien).

    In der crontab wird dann der absolute Pfad zu diesem Shellscript eingetragen!


    D.h. der Inhalt der reolink.sh (oder wie immer Du sie nennst) sieht ungefähr wie folgt aus:


    Bash
    #!/bin/bash
    # 
    # version 1.0
    #
    /mnt/ext/usr/bin/find ??? -type f -mtime +7 –delete
    #

    Für die ??? musst Du natürlich etwas sinnvolles eintragen, damit die richtigen Dateien gefunden werden. Da ich nicht weiß, welche Namen die Kamera erzeugt, kann ich Dir da auch nicht weiterhelfen.


    Achtung! Nur als Beispiel:

    find /root/.cvdupdate/database/ -iname "*" -mtime +14 -delete


    Ist ein Befehl, der auf einem meiner Pi alle Dateien im angegebenen Verzeichnis "/root/.cvdupdate/database/" löscht die älter als 14 Tage sind!


    In der crontab steht dann

    0 2 * * * /etc/config/reolink.sh Das Script muss dann natürlich in /etc/config liegen oder Du musst den Pfad in der crontab anpassen.


    Gruss

    Einmal editiert, zuletzt von FSC830 ()

  • Alternativ müsste das auch mit der App "Qfiling" umsetzbar sein, wobei das kleine Script sicherlich zuverlässiger und Ressourcenschonender arbeitet...

  • Hallo FSC830

    Zu deiner Frage:


    Mod: Nicht deklariertes Zitat ohne Quellenangabe ... korrigiert! :handbuch::arrow: Forenregeln beachten und Die Zitat Funktion des Forums richtig nutzen

    Da ich nicht weiß, welche Namen die Kamera erzeugt, kann ich Dir da auch nicht weiterhelfen.


    Die Kamera Erzeugt die Verzeichnisse Jahr/Monat/Tag und legt folgende xxx.mp4 / jpg Datein an, alle 5 min wird eine neue Erzeugt.

    Kamera hat den Namen: Einfahrt_01_

    Einfahrt_01_20220825101309.mp4

    Einfahrt_01_20220825101310.jpg

    ....

    Einfahrt_01_20220825235933.mp4


    dann wird nach Datum und Uhrzeit abgelegt. Hilft dir das bei einer möglichen Lösung?


    Danke


    Alternativ müsste das auch mit der App "Qfiling" umsetzbar sein, wobei das kleine Script sicherlich zuverlässiger und Ressourcenschonender arbeitet...

    Grüße und Danke für deinen Hinweis, leider kann man dort nicht festlegen wie das Löschen erfolgen soll. Kein Kriterium läßt sich zu weisen ( 7 Tage Verzeichnis x )!

    Einmal editiert, zuletzt von HSE24 () aus folgendem Grund: Ein Beitrag von HSE24 mit diesem Beitrag zusammengefügt.

  • Achtung! Nur als Beispiel:

    find /root/.cvdupdate/database/ -iname "*" -mtime +14 -delete


    Ist ein Befehl, der auf einem meiner Pi alle Dateien im angegebenen Verzeichnis "/root/.cvdupdate/database/" löscht die älter als 14 Tage sind!

    Ich hatte (und habe immer noch) HSE24 so verstanden, dass er genau das möchte! Mein Fehler - Asche über mein Haupt.


    Edit: Ob mtime oder ctime spielt dabei sicher keine Rolle!

  • Sorry, hatte oben im Beispiel einen Fehler, das habe ich korrigiert.

    Die Zeile /etc/config/reolink.sh gehört nicht ins Script!


    Mit dem Dateinamen kannst Du dann so vorgehen:


    Code
    /usr/bin/find /share/.../Einfahrt_01_* -mtime +7 –delete

    So sollte es gehen.

    find liegt bei mir in diesem Verzeichnis.

    Wenn es bei Dir woanders liegt, dann den Pfad anpassen.

    Den Pfad zu den Dateien musst Du vollständig angeben.


    Gruss


    Ich hatte (und habe immer noch) HSE24 so verstanden, dass er genau das möchte! Mein Fehler - Asche über mein Haupt.

    :/ Sorry, ich weiß gerade nicht, was Du meinst!?

    Als ich meine Antwort geschrieben habe, hatte ich Deine Antwort noch gar nicht gesehen ;) .


    HSE24 : Mir ist gerade noch aufgefallen: Im Dateinamen ist automatisch das aktuelle Datum? Dann wird das Script aufwändiger, denn dann muss zunächst das aktuelle Tagesdatum ermittelt werden und passend als Variable im Pfadnamen einfliessen.


    Gruss

    Einmal editiert, zuletzt von FSC830 () aus folgendem Grund: Ein Beitrag von FSC830 mit diesem Beitrag zusammengefügt.

  • eol66 - ja ich möchte das im Verzeichnis Tag und im Verzeichnis Monat der Inhalt gelöscht wird nach 7 Tagen; das aber auch übergreifen, wenn das Jahr sich ändert....


    Hallo all,

    da die Kamera ja auch mit Jahr/Monat/Tag arbeitet, muss der Script genau das beachten, wenn sich der Tag/Monat/Jahr sich ändert!

    Also doch nicht so einfach so etwas umzusetzen.


    Ich bin für jede Lösung Dankbar, auch wenn es eine App geben sollte, die mir dabei Hilft das umzusetzen.

    Grüße

  • Mir ist gerade noch aufgefallen: Im Dateinamen ist automatisch das aktuelle Datum? Dann wird das Script aufwändiger, denn dann muss zunächst das aktuelle Tagesdatum ermittelt werden und passend als Variable im Pfadnamen einfliessen.

    Du schreibst doch in Deinem vorigen Post selbst:

    Mod: Zitat ohne Quellenangabe ... korrigiert! :handbuch::arrow: Forenregeln beachten und Die Zitat Funktion des Forums richtig nutzen

    Achtung! Nur als Beispiel:

    find /root/.cvdupdate/database/ -iname "*" -mtime +14 -delete


    Ist ein Befehl, der auf einem meiner Pi alle Dateien im angegebenen Verzeichnis "/root/.cvdupdate/database/" löscht die älter als 14 Tage sind!


    Ich verstehe HSE24 immer noch so, dass er genau das möchte: Alle Dateien in den Verzeichnissen Jahr/Monat/Tag löschen, die älter als 7 Tage sind. Alle!


    Die Dateinamen sind dabei doch völlig irrelevant, ob sie nun das Datum beinhalten oder nicht.

  • Ja und Nein :D , denn das Datum ist Bestandteil des Pfadnamens.

    D.h. das Script muss ebenfalls automatisch den Pfadnamen anpassen.

    Wenn alle Dateien gelöscht werden sollen, dann kann man auch gleich das ganze Verzeichnis löschen, denn sonst bliebe von jedem Tag ein leeres Verzeichnis übrig.

    ich hatte es zuerst so verstanden, das alle Aufnahmen in einem Verzeichnis landen.


    Gruss

  • eol66 - ja ich möchte das im Verzeichnis Tag und im Verzeichnis Monat der Inhalt gelöscht wird nach 7 Tagen; das aber auch übergreifen, wenn das Jahr sich ändert....

    Mein erster Test würde so aussehen:


    1.) Datei reolink.sh anlegen, wie von FSC830 beschrieben

    2.) EDV etwas mit der Hand am Arm drei Löschbefehle eintragen


    Code
    find /pfad/zu/deinen/dateien/Jahr -ctime +7 -exec rm {} \; &&
    find /pfad/zu/deinen/dateien/Monat -ctime +7 -exec rm {} \; &&
    find /pfad/zu/deinen/dateien/Tag -ctime +7 -exec rm {} \;


    3.) reolink.sh ausführbar machen: chmod +x reolink.sh


    4.) Testen, was Dein Skript macht: sh reolink.sh


    5.) Hat es - wider Erwarten - die entsprechenden Dateien gelöscht, erfolgt der Eintrag in die crontab.


    Ich hatte mich nicht geirrt: Es gab/gibt User, die davon berichten, dass die Einträge in der crontab nach einem Neustart verschwunden sind. Ich habe dieses Problem nicht. Aber auch das kann man ggf. testen: sudo crontab -l zeigt Dir die Einträge.


    Edit: OK, das Verzeichnis heißt also nicht Jahr, sondern bspw. 2022? Heißt auch nicht Monat, sondern bspw. August? Heißt auch nicht Tag, sondern bspw. 27 oder Samstag?


    Wenn dem so wäre, müsste man natürlich noch mit date etwas aus dem Ärmel schütteln.

  • /xxx/ (alle Verzeichnisse, die dann erzeugt werden von der Kamera, sollen die Inhalte, die älter als 7 Tage sind gelöscht werden.

    Jahr

    Monat

    Tag

    Code
    reolink.sh liegt in /etc/config 
    # Beispiel für Befehl alle Dateien in einem Verzeichnis [variable $DIR] die älter als 7 Tage sind löschen:
    /mnt/ext/usr/bin/find /reolink/record_nvr/channel -type f -mtime +7 –delete
    
    SSH Befehl: vi /etc/config/crontab
    # Crontab ergänzen mit:  jede Nacht um 2:30Uhr alle Dateien, die älter als 7 Tage 
    30 2 * * * find /reolink/record_nvr/channel/Jahr -ctime +7 -exec rm {} \; &&
    30 2 * * * find /reolink/record_nvr/channel/Monat -ctime +7 -exec rm {} \; &&
    30 2 * * * find /reolink/record_nvr/channel/Tag -ctime +7 -exec rm {} \;
    SSh Befehl: crontab /etc/config/crontab

    Stimmt das so?

    Grüße


    Überarbeitet 15:01, mit Angaben

    2 Mal editiert, zuletzt von HSE24 () aus folgendem Grund: Mit deinen Angaben mal angelegt, wie es auszusehen hat.

  • * 2 * * * heißt 02:00 nachts. Wenn Du 02:30 haben willst, dann 30 2 * * *.


    Aber langsam verliere ich die Übersicht, wie heißen denn ganz konkret die Verzeichnisse, die die Kamera erstellt/benutzt?


    An besten einen Screenshot einfügen, der die Verzeichnisnamen anzeigt.


    Gruss

  • /xxx/ (alle Verzeichnisse, die dann erzeugt werden von der Kamera, sollen die Inhalte, die älter als 7 Tage sind gelöscht werden.

    Jahr

    Monat

    Tag

    Code
    find /mnt/ext/usr/bin/find /ReoLink/reolink/record_nvr/channel -type f -mtime +7 –delete

    Hast Du den schon mal probiert? Also ssh auf Dein NAS und dort dann o.a. rein kopieren STRG+ ALT + V


    Entweder er löscht oder gibt ne Fehlermeldung aus.

  • Ach Du grüne Neune... :X

    Soooo einfach ist das nicht. Auch nicht schwierig, aber eben auch nicht einfach.

    Also aktuelles Datum ermitteln und dann die Pfadnamen entsprechend anpassen.


    Gruss

  • Oh..... das ist ganz anders, als erwartet! :mcup:


    Aber was solls. Das Verzeichnis für das Jahr hieße dann eben `date +%Y`, für den Monat `date +%m` und für den Tag `date +%d`.


    Damit kann er umgehen, keine Sorge. Ein einfacher Verzeichniswechsel cd `date +%Y` macht genau, was es soll. Er versucht in das Verzeichnis 2022 zu wechseln und wechselt auch, sofern 2022 vorhanden.


    Jahr und Monat sind also schonmal easy. Das Verzeichnis Jahr heißt /Dein/fPad/`date +%Y` und dort dann - wie lange und breit bereits beschrieben - alles löschen, was älter, als 7 Tage ist. Im Monat genauso, nur eben /Dein/Pfad/`date +%m`



    Beim Tag löscht er im Prinzip das ganze Verzeichnis, also `date +%d`, sofern älter, als 7 Tage. = rm -r



    Soweit gut, oder denkst Du bereits darüber nach neue Kameras zu kaufen? :ziped:


    Probiere es aus:

    1.) ssh auf Dein NAS

    2.) cd /ReoLink/reolink/record_nvr/channel/`date +%Y`


    Er muss danach in 2022 stehen. MUSS!

    2 Mal editiert, zuletzt von eol66 ()

  • eol66 - habe mich gerade mal auf Putty eingeloggt und ...


    Danke für die Hilfe eol66


    Zu deiner Frage, nein ich bleibe bei diesem Anbieter, da ich ansonsten zufrieden bin mit dem System und dem Support!

    3 Mal editiert, zuletzt von HSE24 ()