ubuntuusers.de

Automatische Löschung von Daten im OMV

Status: Ungelöst | Ubuntu-Version: Ubuntu 19.10 (Eoan Ermine)
Antworten |

Fraglord

Avatar von Fraglord

Anmeldungsdatum:
24. November 2007

Beiträge: 108

Wohnort: Pforzheim

Hallo zusammen,

Ich habe eine Linux Installation mit einem Open Media Vault ergänzt, das System soll als NAS fungieren.

Bisher funktioniert auch alles. Daten werden geschrieben. Im OMV gibt es auch einen Task Scheduler. Den nutze ich bspw. um

1
apt update && apt upgrade -y

als Root zu starten. Einmal im Monat. Das funktioniert auch soweit.

Will ich nun eine Löschung von Daten, die älter als 3 Tage sind, über diesen scheduler antriggern, passiert nichts.

Folgenden Code habe ich verwendet unter „Root“ Tasks:

1
/usr/bin/find /srv/dev-disk-by-label-Storage/FTP-Server/FI*_* -maxdepth 2 -type f -name '*.jpg' -mtime +1 -delete

Was ist hier falsch? Muss ich das über das Betriebssystem starten (crontab und Skript.sh) oder kann der OMV das auch und ich habe nur einen Knoten im Kopf?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13215

Fraglord schrieb:

Folgenden Code habe ich verwendet unter „Root“ Tasks:

1
/usr/bin/find /srv/dev-disk-by-label-Storage/FTP-Server/FI*_* -maxdepth 2 -type f -name '*.jpg' -mtime +1 -delete

Was ist hier falsch? Muss ich das über das Betriebssystem starten (crontab und Skript.sh) oder kann der OMV das auch und ich habe nur einen Knoten im Kopf?

Du erwähnst nicht, was das für ein Scheduler ist. Ist denn zugesichert, dass die Shell-Metazeichen (hier hauptsächlich "*") auch so behandelt werden wie in einem Skript? Sprich: wird da Globbing für die Namen der Startverzeichnisse gemacht? Falls nicht, geht vielleicht

1
/usr/bin/find /srv/dev-disk-by-label-Storage/FTP-Server -maxdepth 2 -type f -path '/srv/dev-disk-by-label-Storage/FTP-Server/FI*_*/*.jpg' -mtime +1 -delete

Fraglord

(Themenstarter)
Avatar von Fraglord

Anmeldungsdatum:
24. November 2007

Beiträge: 108

Wohnort: Pforzheim

Hallo rklm,

herzlichen Dank für Deine Rückmeldung. So wie ich es verstanden habe, ist es ein Crontab Scheduler.

The server configures all tasks done in the web interface creating this file /etc/cron.d/openmediavault-userdefined on demand as single lines per job.

Quelle: https://openmediavault.readthedocs.io/en/stable/administration/general/cron.html

Ich versuche deinen Skriptvorschlag heute Abend direkt.

Da kommt mir doch die Frage, ob es nicht besser ist, es entweder über das Terminal in diesem File zu definieren oder gleich über "crontab -e"? Speziell mit diesem Satz in der Beschreibung:

If you need a range you can configure a task for each day or simply use terminal with: $ crontab -e

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13215

Fraglord schrieb:

Da kommt mir doch die Frage, ob es nicht besser ist, es entweder über das Terminal in diesem File zu definieren oder gleich über "crontab -e"? Speziell mit diesem Satz in der Beschreibung:

If you need a range you can configure a task for each day or simply use terminal with: $ crontab -e

Die Frage ist etwas seltsam: denn crontab -e macht man ja im Terminal. Wo ist da die Alternative? Gibt es eine grafische Oberfläche für den Scheduler?

Fraglord

(Themenstarter)
Avatar von Fraglord

Anmeldungsdatum:
24. November 2007

Beiträge: 108

Wohnort: Pforzheim

Es ist eine grafische Aufbereitung von crontab (so würde ich es mal nennen), siehe Link hier: https://forum.openmediavault.org/index.php/Attachment/5308-2016-11-23-12-36-20-openmediavault-control-panel-Delibird-local-jpg/?thumbnail=1

Fraglord

(Themenstarter)
Avatar von Fraglord

Anmeldungsdatum:
24. November 2007

Beiträge: 108

Wohnort: Pforzheim

Wie auch immer scheint es wohl jetzt über die grafische Oberfläche zu funktionieren. Ich habe aber sonst nichts mehr geändert in meinem Ausgangsskript, welches ich auch bei crontab eingepflegt habe.

Habt ihr mir eine Idee, wie ich dieses Skript etwas dynamischer und schöner machen kann? Diese Variante funktioniert nicht ☹

1
2
3
4
5
6
7
8
9
#!/bin/bash
 
# VARIABLEN
PFAD="/var/www/files"
ALTER="+2"
DATEITYP="'*.*'"
# ENDE VARIABLEN

/usr/bin/find ${PFAD} -maxdepth 2 -type f -name ${DATEITYP} -ctime ${ALTER} -delete

Und: Ist der Parameter "maxdepth" überhaupt notwendig?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Fraglord schrieb:

Wie auch immer scheint es wohl jetzt über die grafische Oberfläche zu funktionieren. Ich habe aber sonst nichts mehr geändert in meinem Ausgangsskript, welches ich auch bei crontab eingepflegt habe.

Habt ihr mir eine Idee, wie ich dieses Skript etwas dynamischer und schöner machen kann? Diese Variante funktioniert nicht ☹

Erst macht man es funktionstüchtig, möglichst in dem alles dekorative weglässt. Was soll das sein, dynamischer?

Was heißt "funktioniert nicht"? Macht es nichts, macht es zu viel, zu wenig, das falsche?

Was macht es denn, was hasst Du stattdessen erhofft?

Gibt es Fehlermeldungen? Hast Du Logfiles studiert? Hast Du geprüft, ob es überhaupt gelaufen ist?

1
2
3
4
5
6
7
8
9
#!/bin/bash
 
# VARIABLEN
PFAD="/var/www/files"
ALTER="+2"
DATEITYP="'*.*'"
# ENDE VARIABLEN

/usr/bin/find ${PFAD} -maxdepth 2 -type f -name ${DATEITYP} -ctime ${ALTER} -delete

Keine der Variablen wird 2x benutzt. Es erspart also nichts sie anzulegen, sondern ist überflüssige Komplexität. Mehrfache Quotierung ist fehlerträchtig. Willst Du später öfter an den Variablen drehen, oder wieso legst Du die an?

Und: Ist der Parameter "maxdepth" überhaupt notwendig?

Der beschränkt die Tiefe der Unterverzeichnisse, in die abgestiegen wird. Brauchst Du das oder brauchst Du es nicht?

Ersetze mal -name ${DATEITYP} durch -name '*.*'.

Fraglord

(Themenstarter)
Avatar von Fraglord

Anmeldungsdatum:
24. November 2007

Beiträge: 108

Wohnort: Pforzheim

Ich danke Dir für Deine ausführliche Rückmeldung auf meine Frage. Grundsätzlich funktioniert der Befehl so wie oben beschrieben.

Mein Ziel ist im Sinne der Dynamik, dass ich bspw. den Pfad oder den Dateityp als Variable mitgebe. Und so das gleiche Skript über die Variablen oben schnell verwenden und adaptieren kann. Oder über „/usr/bin/sh Skript.sh -PFAD -DATEITYP“ mitgeben, um so mehrere crontabs einzurichten oder Ähnliches.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Fraglord schrieb:

Ich danke Dir für Deine ausführliche Rückmeldung auf meine Frage. Grundsätzlich funktioniert der Befehl so wie oben beschrieben.

Was heißt denn "grundsätzlich funktioniert der Befehl"? Oben hieß es "funktioniert nicht".

Mein Ziel ist im Sinne der Dynamik, dass ich bspw. den Pfad oder den Dateityp als Variable mitgebe. Und so das gleiche Skript über die Variablen oben schnell verwenden und adaptieren kann. Oder über „/usr/bin/sh Skript.sh -PFAD -DATEITYP“ mitgeben, um so mehrere crontabs einzurichten oder Ähnliches.

Inwiefern da Variablen helfen erschließt sich mir nicht.

Wenn Du da Parameter einfügen willst musst Du es an einer anderen Stelle tun, als würdest Du es an Ort und Stelle machen.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
> find  -maxdepth 2 -type f -name "'*.*'"  | head -n 2
> find  -maxdepth 2 -type f -name '*.*'  | head -n 2
./input-22.txt
./Day16a$$anonfun$repeat$1$$anonfun$apply$1.class
> find  -maxdepth 2 -type f -name ${DATEITYP} | head -n 2
find: Pfade müssen dem Ausdruck `Day14a$$anonfun$2.class' vorangestellt werden
find: possible unquoted pattern after predicate `-name'?
> find . -maxdepth 2 -type f -name "${DATEITYP}" | head -n 2
./input-22.txt
./Day16a$$anonfun$repeat$1$$anonfun$apply$1.class

Fraglord

(Themenstarter)
Avatar von Fraglord

Anmeldungsdatum:
24. November 2007

Beiträge: 108

Wohnort: Pforzheim

"Grundsätzlich funktioniert" bedeutet, dass das eigentliche Skript

1
/usr/bin/find /srv/dev-disk-by-label-Storage/FTP-Server/FI*_* -maxdepth 2 -type f -name '*.jpg' -mtime +1 -delete

seine Aufgabe so wahrnimmt, wie es soll ☺

Nun möchte ich dies entsprechend optimieren. Variablen oder Parameter sollen das vereinfachen, dass ich bspw. den Pfad oder den Dateityp als Crontab oder ähnliches mitgeben kann.

Beispiel:

1
2
00 20 * * * /bin/bash /usr/local/sbin/autodelete.sh -pfad /home/username/Downloads -dateityp *.jpg
30 20 * * * /bin/bash /usr/local/sbin/autodelete.sh -pfad /tmp -dateityp *.*
Antworten |