Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Befehl "find" im Terminal und Crontab

  1. #1
    Registrierter Benutzer Avatar von (0o0)
    Registriert seit
    Jul 2015
    Beiträge
    6

    Befehl "find" im Terminal und Crontab

    Moin moin,

    in einem Verzeichnis wird minütlich eine Bild abgelegt, praktischer Weise enthält der Dateiname Datum und Uhrzeit z.B.

    "20171101-215744.jpg"
    "20171101-215844.jpg"
    "20171101-215944.jpg"
    "20171101-220044.jpg" <- volle Stunde (22:00)
    "20171101-230144.jpg"

    Aus Platzgründen habe ich mir überlegt, alle Bild-Dateien die älter als 5 Tage sind werden gelöscht, bis auf die Bild-Dateien zur vollen Stunde.
    Folgender Befehl testete ich erfolgreich im Terminal:
    Code:
    find /var/www/upload/????????-??{01..59}??.jpg -mtime 5 -exec rm -v {} \;

    Diesen Befehl "stopfte" ich in den Crontab, dort funktioniert dieser nicht. Warum nicht???
    Code:
    00 05 * * * find /var/www/upload/????????-??{01..59}??.jpg -mtime 5 -exec rm -v {} \;
    Ermitteln konnte ich, dass die Ursache beim Platzhalter {01..59} liegen muss, den im Crontab funktioniert folgende Variante
    Code:
    00 05 * * * find /var/www/upload/????????-??01??.jpg -mtime 5 -exec rm -v {} \;
    Dann müsste der Befehl 59 mal in den Crontab, aber das ist nicht Sinn der Sache.
    Ich habe unzählige Platzhalter-Varianten getestet, ohne Erfolg.
    {01..59}
    {01-59}
    "{01..59}"
    [01..59]
    [01-59]
    "[01..59]"
    {!00}
    [!00]
    "{!00}"
    "[!00]"
    usw.

    Terminal und Crontab (crontab -e) wird unter gleichem Benutzer ausgeführt.
    Das gleiche Problem besteht, wenn der Befehl in einem Bash-Skript ausgeführt wird. Dabei wurden die Interpreter "#!/bin/sh" und "#!/bin/bash" genutzt.

    Fehlermeldung per Mail:
    Code:
    Subject: Cron <webcam@WebCam> find /var/www/upload/????????-??{01..59}??.jpg -mtime 5 -exec rm -v {} \;
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    X-Cron-Env: <SHELL=/bin/sh>
    X-Cron-Env: <HOME=/home/webcam>
    X-Cron-Env: <PATH=/usr/bin:/bin>
    X-Cron-Env: <LOGNAME=webcam>
    Message-Id: <E1eP0Mj-00031M-2X@WebCam.local>
    Date: Wed, 13 Dec 2017 07:18:01 +0100
    
    find: ‘/var/www/upload/????????-??{01..59}??.jpg’: Datei oder Verzeichnis nicht gefunden
    Warum funktioniert der find-Befehl in der Konsole, aber nicht im Crontab und in einem Skript???
    Wie muss der Platzhalter im Crontab richtig angegeben werden?

  2. #2
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    20.565
    poste doch bitte mal die Variante "Script" - würde ich vorschlagen, cron ist bei Platzhaltern immer ein wenig zickig.

    ... warum das im Script nicht funktionieren sollte kann ich mir gerade ohne konkretes Script und Fehlermeldung eigentlich nicht vorstellen...
    (... und welches OS konkret verwendet wird...)
    Ich bin root - ich darf das.

  3. #3
    Registrierter Benutzer Avatar von (0o0)
    Registriert seit
    Jul 2015
    Beiträge
    6
    OS natürlich.
    Linux version 4.9.0-4-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18) ) #1 SMP Debian 4.9.51-1 (2017-09-28)

    Im Script, mit dem Befehls-Interpreter "#!/bin/bash" funktioniert es wie folgt:
    Code:
     #!/bin/bash
     find /var/www/upload/????????-??{01..59}??.jpg -mtime 5 -exec rm -v {} \;
    Da bin ich schon einen gewaltigen Schritt weiter, aber eleganter wäre es im Crontab.
    Geändert von (0o0) (13.12.17 um 08:56 Uhr)

  4. #4
    Registrierter Benutzer Avatar von Huhn Hur Tu
    Registriert seit
    Nov 2003
    Ort
    Karlsruhe
    Beiträge
    1.962
    Da bin ich schon einen gewaltigen Schritt weiter, aber eleganter wäre es im Crontab.
    Nein ist es nicht, es ist Fehleranfaellig unuebersichtlich und eine Wartungshoelle. Und fuer jeden der mal statt crontrab -e crontab -f gemacht hat weiss, dass sowas auch noch selten daemlich ist.
    Zwischen anonym sein wollen und seine Daten nicht verkaufen wollen, liegen zwei Welten. Wenn man sich einen kostenpflichtigen Dienst sucht, dann meist, weil man für diese Dienstleistung zahlt und nicht selbst das Produkt sein will.


  5. #5
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    20.565
    vor allem: ein vernünftiges Script bietet Logs, Fehlerbehandlung, ... - und tut immer, sei es in der Crontab, in /etc/cron.*/, ..., Anachron und bei allen üblichen cron-Daemons.

    Was ich nur schön fände - völlig OT - wäre mal ein "crontab -l"-Equivalent, welches eben auch cron.daily, /etc/cron.d/*, /etc/crontab und die User-Crontab umfasst...
    Ich bin root - ich darf das.

  6. #6
    Registrierter Benutzer Avatar von (0o0)
    Registriert seit
    Jul 2015
    Beiträge
    6
    Ich habe mit "crontab" noch keine schlechten Erfahrungen machen müssen, bis auf dieses oben genannte Platzhalter-Phänomen, welches ich auch lösen konnte.
    Cron nutzt den "sh" Befehls-Interpreter" und ist in der "/etc/crontab" festgelegt.
    Cron sendet Fehlermeldungen per Mail an "/var/mail/[USER]"

    Bei mir arbeitet eine VM mit Debian seit 2013. Unterschiedlichen Aufgaben werden durch Cron gesteuert und führt auch minütliche Befehle sehr zuverlässig aus. Hin und wieder musste ich die Maschine neu starten durch Festplattenwechsel oder vergrößern des Speicherplatzes der VM, ansonsten läuft diese über Monate, Jahre unbeaufsichtigt sehr stabil.
    Was passiert eigentlich beim Befehl "crontab -f"? Eine Beschreibung konnte ich nicht finden.

  7. #7
    Registrierter Benutzer Avatar von Huhn Hur Tu
    Registriert seit
    Nov 2003
    Ort
    Karlsruhe
    Beiträge
    1.962
    Cron nutzt den "sh" Befehls-Interpreter"
    und das ist nicht immer gleich. /bin/sh ist ein symlink zu "einer" Shell, meist "dash" bei Debian, bash bei anderen.
    deswegen hat ein Shell skript immer einen shabeng zur Angabe des richtigen Interpreters.
    Zwischen anonym sein wollen und seine Daten nicht verkaufen wollen, liegen zwei Welten. Wenn man sich einen kostenpflichtigen Dienst sucht, dann meist, weil man für diese Dienstleistung zahlt und nicht selbst das Produkt sein will.


  8. #8
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    20.565
    hattest Du den Befehl eingentlich exakt so in der crontab stehen? Der kann an der Konsole auch schon mal Probleme machen - daher auf jeden Fall den Pfad quoten. Sonst schlägt an der Konsole auch evtl. schon mal die shell-Expansion zu - und das kann zu sehr lustigen Ergebnissen führen. Noch so ein Punkt, der sich in einem Script wesentlich besser abfangen lässen.

    ... zudem such in der man-Page von find mal nach delete - spart Dir vermutlich den exec-Zweig...
    Ich bin root - ich darf das.

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 10.06.14, 09:36
  2. "find" und "grep" aber wie
    Von Flatbury12 im Forum Linux Allgemein
    Antworten: 3
    Letzter Beitrag: 21.04.06, 10:34
  3. findutils: "find" -- Problem mit "-mtime" und Unterverzeichnissen
    Von drunkenPenguin im Forum Linux Allgemein
    Antworten: 1
    Letzter Beitrag: 30.03.06, 16:30
  4. 1.)Befehl "top" 2.)"..count to high.."
    Von shaktisirga im Forum Linux Allgemein
    Antworten: 2
    Letzter Beitrag: 09.11.04, 00:06
  5. Warum "bs" und "count" in dd-Befehl?
    Von CboyGeek im Forum Linux Allgemein
    Antworten: 4
    Letzter Beitrag: 17.08.04, 16:48

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •