cronjob geht nicht

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    ich hoffe ich habe mein Thread in dem richtigen Unterforum erstellt. Wenn nicht verschiebt mich bitte und entschuldigt mich.

    Ich habe mit meinem PI+Raspbian Wheezy einen Webcam Server am Laufen.

    Das Einrichten habe ich ohne Probleme hinbekommen.
    Der Pi speichert auch via MOTION die Bilder bei denen er eine Bewegung erkennt, in /home/motion

    Jetzt will ich aber, dass er die Bilder nach 2 Tagen automatisch löscht und habe im Netz mehrere Anleitungen gelesen, es funktionieren aber beide nicht.

    1) Shell-Script erstellt:
    mein script liegt in home/pi/ und habe ich autodelete.sh genannt
    das script hat folgenden inhalt

    Bash
    #!/bin/bash
    find /home/motion/* -mtime +2 -exec rm {} \;

    wenn ich es manuell mit

    Code
    sh ./autodelete.sh


    via putty starte löscht er mir die Bilder die älter sind als 2 Tage.
    Das Script scheint also zu funktionieren
    Die volle Lese+Schreiberechte auf den Ordner home/motion habe ich via

    Code
    sudo chmod 0777 /home/motion


    erstellt.

    Da ich die Ausführung automatisch möchte "Jeden Tag um Mitternacht" habe ich via

    Code
    crontab-e


    folgenden Eintrag gemacht:

    Code
    0 0 * * * /bin/sh/ /home/pi/autodelete.sh


    ich habe es auch schon wie in der Anleitung welche ich gefunden habe so gemacht

    Code
    @daily /bin/sh/ /home/pi/autodelete.sh

    Doch beides funktioniert nicht!

    2) Dann habe ich Variante 2 genommen - Nach einer anderen Anleitung

    Also im gleichen cronjob folgendes eingetragen:

    Code
    0 0 * * * find /home/motion -ctime +2 -exec rm {} \;

    funktioniert aber auch nicht....

    ich dachte vielleicht, da ich mich in putty via Benutzer "PI", der bei mir leider keine ROOT-Rechte hat, einlogge, dass ich den cronjob mit sudo einrichten muss

    Also habe ich die oben genannte Eintrage im

    Code
    sudo crontab-e

    gemacht,
    doch auch hier kein erfolg.

    Ich verzweifle solangsam,

    Danke und Grüße

    Dennis


    edit//

    sehe gerade dass er den cronjob hier speichert: /tmp/crontab.pqNp8u/crontab/tmp/crontab.pqNp8u/crontab

    wobei er auch nach einem Neustart noch den ganzen inhalt halt, also nicht gelöscht wird.

    Einmal editiert, zuletzt von housebub (5. April 2015 um 09:38)

  • Hallo Dennis,

    herzlich Willkommen in unserem Forum!

    Wusstest Du, dass Cron-Jobs nur funktionieren, wenn der vollständige Pfad angegeben ist?

    In der Version

    Code
    0 0 * * * find /home/motion -ctime +2 -exec rm {} \;

    solltest Du find um den Pfad zu find ergänzen. Die Antwort wird Dir

    Code
    whereis find


    oder

    Code
    which find

    verraten.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Der Shebang in deinem Script besagt das es sich um ein bash Script handelt. Du führst es aber mit sh aus :s Das ist nicht das selbe, sh ist älter und kann nicht so viel wie bash. Die Dateiendungen sagen nichts aus, dienen nur der Übersicht, könnte man auch ganz weg lassen..

    Wenn man "crontab -e" (mit Leerzeichen zwischen Befehl und Parameter) ausführt, wird zunächst eine temporäre Datei in /tmp/ erzeugt und die dann später automatisch in den richtigen Ordner verschoben - lass dich daran also mal nicht stören.

    Führe den Befehl exakt so wie er in der Crontab steht mal manuell aus, ohne irgendetwas davor zu setzen oder allgemein daran zu verändern. Den exakt identischen Befehl wie er in die Crontab eingetragen wird (aber natürlich ohne die ersten 5 Spalten nämlich der Zeitangabe, das gehört nicht zum Befehl).

    Du nennst leider 2 verschiedene Befehle: ein mal "crontab-e" und ein mal "sudo crontab-e" (beide male aber ohne Leerzeichen zwischen crontab und -e, das wird SO 100% nicht funktionieren). Da gibt es leider auch einen Unterschied. Wenn du als Benutzer 'pi' den Befehl "crontab -e" ausführst, bearbeitet man die Benutzer-Crontab von 'pi'. Führst du aber irgend etwas mit sudo aus, wird der nachfolgende Befehl als 'root' ausgeführt (super user do), "sudo crontab -e" würde dann also die Crontab des root Benutzers bearbeiten..

    Siehe dazu auch Forumsuche nach: crontab
    1.Treffer


    Ich stell das mal nach. Ich erstelle /home/motion , vergebe für den Ordner die Rechte 0777 , erstelle leere Dateien mit einem Zeitstempel von vor 4 Tagen, kontrolliere das und führe dann deinen Befehl aus:
    (alle Befehle führe ich als root aus)

    Hm, scheint nicht funktioniert zu haben .... Also kann es über Crontab genau so wenig funktionieren, wenn es Manuell schon nicht geht :fies:

    Veränder ich an deinem Befehl nur eine Kleinigkeit, nämlich ctime in mtime funktioniert es auf Anhieb!

    Code
    root@RoPi:/home/motion# find /home/motion/ -mtime +2 -exec rm {} \; 
    root@RoPi:/home/motion# ls -la            
    insgesamt 8
    drwxr-xr-x 2 root root 4096 Apr  5 11:19 .
    drwxr-xr-x 4 root root 4096 Apr  5 10:59 ..
    root@RoPi:/home/motion#
  • boah super danke!
    ich sagt nicht nur wo mein Fehler ist, sonder auch warum hier mein Fehler ist.

    Ihr seid echt spitze!!

    Hab jetzt mal die Variante von meigrafd genommen und mal in meinem crontab -e mal anstatt ctime mtime eingetragen.
    Habe ihn auch manuell getestet und da gings dann auch.

    Super und danke !!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!