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

  • eol66

    Würdest du dich bitte bezüglich Code (Inlinecode/Codeblocks) an die Forenregeln halten?

    Danke

    Entschuldige bitte, da ich neu im Forum bin, habe ich da nicht aufgepasst. Ich werde aber - bevor ich überhaupt wieder poste - zuerst die Forenregeln genau studieren. Bis ich das erledigt habe, melde ich mich erst einmal ab.

  • habe mich gerade mal auf Putty eingeloggt und die 3 Cronjobs eingetragen auf der Startseite und neu gestartet mit dem Befehl.

    Keine Fehler Meldung bekommen, es steht nun (processing) dahinter.

    Das kann m.E. so nicht funktionieren, oder willst Du für jedes Verzeichnis einen eigenen Cronjob eintragen? ;)

    Ich bin gerade dabei, ein altes Script von mir anzupassen, aber wie gesagt ganz so trivial ist es in diesem Fall nicht.


    Gruss

  • Hallo, habe nicht gedacht das ich so viele Tage und Stunden damit verbringen werde, um so etwas einzupflegen.... Kopfschütteln


    Und ich weiß noch immer nicht, ob ich es mit Eurer Hilfe angelegt habe, .... siehe Beitrag #20


    eol66 ; dr_mike hat nur einen Hinweis gegeben, damit wir die Übersicht zwischen Text/Inlinecode/Codeblocks beibehalten.


    Grüße

  • Wäre es alles in einem Verzeichnis, dann wäre das relativ einfach. Aber die Struktur, die Reolink einem aufzwingt, erfordert eben etwas mehr Aufwand.


    Gruss

  • Nun bin ich schon mal etwas schlauer, siehe Link: https://www.meintechblog.de/20…-management-deaktivieren/

    Nach einem weiteren Stöbern im Netz; habe ich nun eine Erklärung zu meiner Frage gefunden - nein, es kann nicht funktionieren - siehe hier: Einfach nur Putty öffnen und los, geht nicht mehr, erst Q -Enter und dann Y -Enter um die Befehle auszuführen.

    In meinem Fall kommen Fehler Meldungen:


    del7.sh liegt im Verzeichnis

    Code
    /mnt/HDA_ROOT/ .config

    mit diesem Inhalt

    Bash
    #!/bin/bash
    #
    # Beispiel für Befehl alle Dateien in einem Verzeichnis [variable $DIR] die älter als 7 Tage sind löschen:
    /mnt/ext/usr/bin/find /Einfahrt/ /Einfahrt/`date +%Y` -ctime +7 -exec -r {} \; 
    /mnt/ext/usr/bin/find /Einfahrt/ /Einfahrt/`date +%m` -ctime +7 -exec -r {} \; 
    /mnt/ext/usr/bin/find /Einfahrt/ /Einfahrt/`date +%d` -ctime +7 -exec -r {} \;  
    #
    #

    Putty-SSH:

    Code
    03 2 * * * /etc/config/del7.sh
    
    /mnt/HDA_ROOT/ .config/Crontabvi
    E486: Pattern not found: etc

    Das Verzeichnis mit der Datei del7.sh wird nicht gefunden. Jemand eine Lösung; wo liegt mein Fehler?


    Danke


    Die Abfrage von eol66 ->  cd /ReoLink/reolink/record_nvr/channel/`date +%Y` und man ist im Ordner 2022 - Funktioniert.

  • Ja schon, das ist ja die Krux. Die Kamera legt für jeden Tag einen neuen Ordner an, dazu einen Ordner pro Monat, alles unter einem Jahresordner...


    Das ist auch das, was mich anfangs etwas verwirrte.

    Du willst eigentlich nicht Dateien löschen, die älter als 7 Tage sind, sondern Ordner!

    Im Grunde genommen hättest Du dann folgende Struktur:

    2022

    -- 08 (August)

    ----27 (heute)

    ----26

    ...

    ----21


    und alle anderen Ordner unter "08" sind gelöscht.


    Morgen, nach der Ausführung des Scripts, wäre dann der Ordner "21" gelöscht, übermorgen dann die "22" usw. usw.

    Ist das so richtig?


    Gruss


    Edit: So, hier das Script. OHNE GEWÄHR! EIGENES RISKIO!!!


    Ich habe zunächst das Löschen auskommentiert, damit nichts schief geht.

    Stattdessen wird per touch eine Datei erzeugt und der Verzeichnisinhalt gelistet.

    Das musst Du, wenn es immer das richtige Verzeichnis ist, ändern (Zeilen 132-139).


    Ich habe das Script wie folgt gebaut: ausgehend vom heutigen Datum wird der Ordner, der 1 Woche alt ist, gelöscht. Will man statt 7 eine andere Zahl haben (z.B. alles was älter als 14 Tage ist, kannst Du das mit einem Parameter beim Aufruf übersteuern.


    Ich bin davon ausgegangen, das das Script in /etc/config abgelegt wird.

    Der Aufruf in der crontab könnte dann so aussehen:

    30 2 * * * /etc/config/reolink01.sh -d 14 -to me@mail.com -from nas@home.de


    Läßt man -d 14 weg, dann wird automatisch die 7 genommen (alles, was älter als 7 Tage ist, wird gelöscht).


    Wenn Du SMTP auf dem NAS konfiguriert hast, kannst Du Ziel- und Absenderadresse eingeben.


    Ansonsten wird auch jedesmal ein Log in /etc/config geschrieben. Bitte erst sorgfältig testen, bevor Du das löschen freischaltest!

    Wahrscheinlich musst Du den Pfad noch anpassen (Zeile 18: /share/CACHEDEV...).


    Gib dann bitte eine Rückmeldung.


    Gruss

    3 Mal editiert, zuletzt von FSC830 () aus folgendem Grund: Fehler korrigiert!

  • Nein, bei mir ist keine PN angekommen. Habe Dir auch eine gesendet.


    Gruss

  • 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!?

    Korrekt. crontab -e führt nicht zu einem rebootfesten Ergebnis.


    Stattdessen muss /etc/config/crontab geändert werden, die crontab neu geladen und der Cron-Dämon neu gestartet werden. Siehe hier für eine vollständige Beschreibung.

  • Zur Information:

    Mit Hilfe von FSC830 und seiner Geduld mit mir haben wir seinen Script für mich umgesetzt, sodass ich nicht mehr per Hand das Löschen des Verzeichnis ausführen muss.


    Ich bedanke mich noch mal bei allen für die Hinweise und die Hilfe.


    Einen schönen Sonntag

    HSE24

  • Hier eine aktualisierte Version des Scripts.

    Zur Anpassung an vorhandene Strukturen müssen nur folgende Zeilen geändert werden:


    Code
    RECPATH="/pfad zu den Dateien"
    TOMAIL="Empfänger Mail"
    FROMMAIL="Absender Mail"

    Das Script ist noch im "Testmodus", d.h. es wird nichts gelöscht.

    Um das Löschen zu aktivieren ist der Hashtag vor dem rm -r Befehl zu entfernen,

    dafür sollte der touch Befehl mit einem Hashtag versehen werden.



    Falls es noch Verbesserungsvorschläge gibt - nur her damit :S .


    Gruss