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.
[Hilfe benötigt] Cronjob anlegen um Täglich 50 GB zu löschen
- HSE24
- Unerledigt
-
-
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
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:
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...).
Bash
Alles anzeigen#!/bin/bash # script by FSC830 # version 1.0 # # VER="1.0" # define # ---------------------------------------------------------------- SCRIPT=$0 SCRIPTPATH=$(dirname "$SCRIPT") SCRIPTNAME=$(basename "$SCRIPT") SNAME="${SCRIPTNAME%.*}" LOGFILE="$SCRIPTPATH/$SNAME.log" HNAME=${HOSTNAME} RECPATH="/reolink/record_nvr/channel1" # ---------------------------------------------------------------- # end define /bin/echo -e "$(date +"%Y-%m-%d %H:%M:%S") - run [$SCRIPT $@] (v $VER)" >> $LOGFILE set -eE -o functrace failure() { local lineno=$1 local msg=$2 /bin/echo -e "Failed at line $lineno: $msg" /bin/echo -e "\nFailed at line $lineno: $msg\n" >> $LOGFILE } trap 'failure ${LINENO} "$BASH_COMMAND"' ERR function help { echo ' Run script with command: /etc/config/'$SCRIPTNAME' -dob xx -to abc@xyz.com - from nas@myhome.com Possible arguments: -d / -dob: number of days to keep (i.e. 7 means ALL files older than 7 days will be deleted (= last 7 days will be kept)! -to: to e-mail address - default nobody@somewhere.com -from: sender e-mail address - default '$HOSTNAME' Some arguments can be entered either by long name or by first letter (-d == -dob). All arguments can be entered by lower or upper case letters. If no arguments are given, the defaults from script are used. Note: if sender e-mail is not correct, an e-mail is may be send, but not recognized at mail host! Please ensure that e-mail is correct. ' exit } ########################## # /bin/echo "$(date +"%Y-%m-%d %H:%M:%S") - run [$SCRIPT]" >> $LOGFILE while [ "$1" ] do if [ "x$1" == "x-h" ] || [ "x$1" == "x--help" ] ; then help elif [ "x$1" == "x-d" ] || [ "x$1" == "x-D" ] || [ "x$1" == "x-dob" ] || [ "x$1" == "x-DOB" ]; then if [ "$2" != "" ] && [ $(echo "$2" | grep "^[0-9]\+$") ]; then DOB=$2 fi shift elif [ "x$1" == "x-to" ] || [ "x$1" == "x-TO" ]; then if [ "$2" != "" ] ; then TOMAIL=$2 else echo "no recipient" echo "no recipient" >> $LOGFILE exit fi shift elif [ "x$1" == "x-from" ] || [ "x$1" == "x-FROM" ] ; then if [ "$2" != "" ] ; then FROMMAIL=$2 else echo "no sender" echo "no sender" >> $LOGFILE exit fi shift else echo "Unknown argument $1" echo "Unknown argument $1" >> $LOGFILE help fi shift done # set default values if [ "$DOB" == "" ] ; then DOB=07 fi ###################################################################################### # mail adresses for sender and recipient if [ "$TOMAIL" == "" ] ; then TOMAIL="nobody@somewhere.com" fi if [ "$FROMMAIL" == "" ] ; then FROMMAIL=$HNAME fi # D1 (d one) = current date (today- check RTC!) D1=`date +%Y%m%d` D2=`date +%Y%m%d -d "-$DOB day"` CYR=`date +%Y -d "-$DOB day"` CMO=`date +%m -d "-$DOB day"` CDD=`date +%d -d "-$DOB day"` ### action to do ### touch $RECPATH/$CYR/$CMO/$CDD/test.txt echo "Ausgabe von $RECPATH/$CYR/$CMO/$CDD:" ls -lisa $RECPATH/$CYR/$CMO/$CDD #rm -r $RECPATH/$CYR/$CMO/$CDD ls -lisa $RECPATH/$CYR/$CMO # mail notification to check run of script TMPFILE="/etc/config/dailymail.txt" /bin/echo -e "Subject: Day deleted from records: $D2" >> "$TMPFILE" /bin/echo -e "To: $TOMAIL" >> "$TMPFILE" /bin/echo -e "From: $FROMMAIL" >> "$TMPFILE" /bin/echo -e "" >> "$TMPFILE" /bin/echo -e "" >> "$TMPFILE" /bin/echo -e "Today is $D1!" >> "$TMPFILE" /bin/echo -e "" >> "$TMPFILE" /bin/echo -e "" >> "$TMPFILE" /bin/echo -e "Version: $VER" >> "$TMPFILE" /bin/echo -e "\tDay deleted from records: $D2" >> $LOGFILE /bin/echo -e "\tToday is $D1!" >> $LOGFILE if [ "$TOMAIL" != "" ] && [ "$TOMAIL" != "nobody@somewhere.com" ] ; then /usr/sbin/sendmail -v -t < $TMPFILE /bin/echo #else /bin/echo -e "\tTo mail = $TOMAIL" >> $LOGFILE fi rm $TMPFILE exit
Gib dann bitte eine Rückmeldung.
Gruss
-
Du hast eine PN zu deiner Arbeit. Danke
-
Nein, bei mir ist keine PN angekommen. Habe Dir auch eine gesendet.
Gruss
-
Kommunikation steht, Ergebnis schreibe ich hier später und im Thema: Reolink einrichten Ergänze ich das zum Update dieser Kamera.
-
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.
-
-
Hier eine aktualisierte Version des Scripts.
Zur Anpassung an vorhandene Strukturen müssen nur folgende Zeilen geändert werden:
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.
Bash
Alles anzeigen#!/bin/bash # script by FSC830 # version 1.1 # # VER="1.1" # define # ---------------------------------------------------------------- SCRIPT=$0 SCRIPTPATH=$(dirname "$SCRIPT") SCRIPTNAME=$(basename "$SCRIPT") SNAME="${SCRIPTNAME%.*}" LOGFILE="$SCRIPTPATH/$SNAME.log" HNAME=${HOSTNAME} RECPATH="/path_to_files" TOMAIL="xxx@yyy.de" FROMMAIL="zzz@aaa.de" # ---------------------------------------------------------------- # end define /bin/echo -e "$(date +"%Y-%m-%d %H:%M:%S") - run [$SCRIPT $@] (v $VER)" >> $LOGFILE set -eE -o functrace failure() { local lineno=$1 local msg=$2 /bin/echo -e "Failed at line $lineno: $msg" /bin/echo -e "\nFailed at line $lineno: $msg\n" >> $LOGFILE } trap 'failure ${LINENO} "$BASH_COMMAND"' ERR function help { echo ' Run script with command: /etc/config/'$SCRIPTNAME' -dob xx -to abc@xyz.com - from nas@myhome.com Possible arguments: -d / -dob: number of days to keep (i.e. 7 means the directory 7 days backwards will be deleted (= directories of last 7 days will be kept)! -r / -recpath prefix path to recorded files. -to: to e-mail address - default nobody@somewhere.com -from: sender e-mail address - default '$HOSTNAME' Some arguments can be entered either by long name or by first letter (-d == -dob). All arguments can be entered by lower or upper case letters. If no arguments are given, the defaults from script are used. EXAMPLE for the recpath name: This script is mainly created for use of a Reolink camera. The camera creates a dynamic directory structure for the recorded files in the format /YYYY/MM/DD. If in camera a path is set, i.e. /myfiles/camera/recordings the complete path name is /myfiles/camera/recordings/YYYY/MM/DD. In this case enter for the recpath /myfiles/camera/recordings (same path as set in camera). The dynamic rest of the path is calculated by this script. If no -d parameter is enteed, the default is 7, which means that the directory with files 7 days backwards - from time script is exectuted - will be deleted! Note: if sender e-mail is not correct, an e-mail is may be send, but not recognized at mail host! Please ensure that e-mail is correct. ' exit } ########################## # /bin/echo "$(date +"%Y-%m-%d %H:%M:%S") - run [$SCRIPT]" >> $LOGFILE while [ "$1" ] do if [ "x$1" == "x-h" ] || [ "x$1" == "x--help" ] || [ "x$1" == "x-H" ] || [ "x$1" == "x--HELP" ] || [ "x$1" == "x-?" ] ; then help elif [ "x$1" == "x-d" ] || [ "x$1" == "x-D" ] || [ "x$1" == "x-dob" ] || [ "x$1" == "x-DOB" ]; then if [ "$2" != "" ] && [ $(echo "$2" | grep "^[0-9]\+$") ]; then DOB=$2 fi shift elif [ "x$1" == "x-to" ] || [ "x$1" == "x-TO" ]; then if [ "$2" != "" ] ; then TOMAIL=$2 else echo "no recipient" echo "no recipient" >> $LOGFILE exit fi shift elif [ "x$1" == "x-from" ] || [ "x$1" == "x-FROM" ] ; then if [ "$2" != "" ] ; then FROMMAIL=$2 else echo "no sender" echo "no sender" >> $LOGFILE exit fi shift elif [ "x$1" == "x-r" ] || [ "x$1" == "x-recpath" ] || [ "x$1" == "x-R" ] || [ "x$1" == "x-RECPATH" ]; then if [ "$2" != "" ] ; then RECPATH=$2 else echo "no path" echo "no path" >> $LOGFILE exit fi shift else echo "Unknown argument $1" echo "Unknown argument $1" >> $LOGFILE help fi shift done # set default values if [ "$DOB" == "" ] ; then DOB=07 fi ###################################################################################### # mail adresses for sender and recipient if [ "$TOMAIL" == "" ] ; then TOMAIL="nobody@somewhere.com" fi if [ "$FROMMAIL" == "" ] ; then FROMMAIL=$HNAME fi # D1 (d one) = current date (today- check RTC!) D1=`date +%Y%m%d` D2=`date +%Y%m%d -d "-$DOB day"` CYR=`date +%Y -d "-$DOB day"` CMO=`date +%m -d "-$DOB day"` CDD=`date +%d -d "-$DOB day"` ### action to do ### if [ -d "$RECPATH/$CYR/$CMO/$CDD" ] then echo "directory exists" MSUB="CAMERA: Day deleted from records:" touch $RECPATH/$CYR/$CMO/$CDD/test.txt #rm -r $RECPATH/$CYR/$CMO/$CDD else echo "directory not exists!" MSUB="CAMERA: directory not exists!" fi # mail notification to check run of script TMPFILE="/etc/config/dailymail.txt" /bin/echo -e "Subject: $MSUB $D2" >> "$TMPFILE" /bin/echo -e "To: $TOMAIL" >> "$TMPFILE" /bin/echo -e "From: $FROMMAIL" >> "$TMPFILE" /bin/echo -e "" >> "$TMPFILE" /bin/echo -e "" >> "$TMPFILE" /bin/echo -e "Today is $D1!" >> "$TMPFILE" /bin/echo -e "" >> "$TMPFILE" /bin/echo -e "" >> "$TMPFILE" /bin/echo -e "Version: $VER" >> "$TMPFILE" /bin/echo -e "\t$MSUB $D2" >> $LOGFILE /bin/echo -e "\tToday is $D1!" >> $LOGFILE if [ "$TOMAIL" != "" ] && [ "$TOMAIL" != "nobody@somewhere.com" ] ; then /usr/sbin/sendmail -v -t < $TMPFILE /bin/echo #else /bin/echo -e "\tTo mail = $TOMAIL" >> $LOGFILE /bin/echo -e "\tSubject = $MSUB" >> $LOGFILE fi rm $TMPFILE exit
Falls es noch Verbesserungsvorschläge gibt - nur her damit .
Gruss
-
Danke, habe ich übernommen und angepaßt mit meinen Angaben.