Crontab bearbeitet aber Job wird nicht ausgeführt

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

    ich bin am verzweifeln, ich bekomme es einfach nicht hin das mein Cronjob ein Schellscript aufruft und ausführt.

    Ich hab mehrere varianten versucht Benutzer Pi, root, gobale Crontab, Mit Path Angabe unter der Shebang mit angabe von /bin/bash vor dem Pfad der Datei,..

    Ich hab auch den Pfad von env im Terminal Fenster und beim speichern einer Datei über cronjob (das übrigens funktioniert hat :)) in eine Datei verglichen, hier sind die Pfade unterschiedlich.

    Was hab ich gemacht:

    ich hab mich mit Root über putty (und auch sftp) angemeldet dun hab einen Ordner erstellt

    /home/pi/scripts/groheblue/

    Da hab ich zwei Dateien erstellt, einmal groheblue_on.sh und groheblue_off.sh

    Dann chmod +x bei beiden Dateien (hab auch sogar schon 0777 versucht)

    Dann bin ich mit nano /etc/crontab und hab dann den cronjob eingegeben

    Code
    * * * * *    root   /bin/bash/    /home/pi/scripts/groheblue/groheblue_on.sh

    (Ich hab gelegen ich muss cron nicht neu starten)

    Normal sollte jetzt die Datei groheblue_on.sh ausgeführt werden

    In dieser ist ein ganz einfahes Script das nur die Uhrzeit in eine Logdatei speichert.

    Wenn ich die Datei direkt auf der über putty aufrufe funktioneirt das ohne Probleme, nur über Cronjob eben nicht.

    Ich hab dann auch in /var/log/syslog nachgeschaut, da ist zwar ein Eintrag drin aber keine Fehlermeldung oder sonstwas.

    kann mir jemand helfen oder sagen was ich falsch mache?

    Ich habs auch schon mit einer benutzer ctrontab für pi und einer benutzercrontab für root versucht, selbes ergebnis.

    :danke_ATDE:

    Danke

  • Crontab bearbeitet aber Job wird nicht ausgeführt? Schau mal ob du hier fündig wirst!

  • Danke euch Leute für die schnelle Antworten!

    hyle: da ich das jetzt aus dem Kopf schnell auf der Arbeit getippselt hab hab ich da leider einen Slash zu viel drin gehabt, dieser ist bei mir natürlich nicht drin!

    hier der Richte Code aus der Crontab

    Die Zeile mit # war der ursprüngliche Versuch und dann hab ich rumprobieren begonnen.

    Zum PATH:

    #PATH War der Pfad der drin war,

    PATH ist das was mir der Cronjob in die env.output geschrieben hat

    Hintergrund ist ich möchte eine verbaute Funksteckdose steuern und der einfachste Weg erscheint mir über Cron als da lange in nem Phytonscript rum zu wurschteln.

    Einschalten um 06:00 und ausschalten um 23:59.

    Ich habe mit also zwei Dateien angelegt einmal einschalten und einmal ausschalten, in beiden wird dann die selbe Funktionsdatei mit einem anderen Parameter aufgerufen.

    Da ich das noch nicht habe wollte ichs nur mal mit schreiben in eine Logdatei simulieren ob das so ist wie ich mir das vorgestellt habe :)

    groheblue_on.sh

    Bash
    #!/bin/bash
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
    # GROHEBLUE_ON
    echo "Groheblue ON -" $(date "+%d.%m.%Y - %H:%M") >> log.txt
  • Mit crontab -e rufst Du die Benutzer crontab auf. Solltest Du Superuser Rechte benötigen, mit sudo davor. Das ist imho deutlich besser, als eine eigene Datei anzulegen.

    Uuuuuund: Den Ausgabepfad Deiner Logdatei musst Du unbedingt angeben, sonst schreibt’s ins Nirvana...

  • Mein Gott bin ich ein Würstchen :)

    Jetzt check ichs , ich muss natürlich auch den Pfad in der Datei komplett angeben.

    Danke danke danke, ich hätte mir 3 sinnlose Stunden sparen können wenn ich gleich gefragt hätte.

    Und ja liegt in /root/log.txt und ja es sind alle Einträge drin :)

    Danke euch nochmal für die schnelle hilfe und schönen Tag noch.

  • Du solltest crontab Files nicht direkt editieren, sondern das "crontab" Programm dafür verwenden.

    Nur dann werden die crontab Files in das (für Deine Version) richtige Verzeichnis mit den richtigen Rechten erstellt.

    Du musst auch einen Zeitpunkt festlegen, zu dem Dein Programm starten soll.

    Siehe < man crontab > < man 5 crontab >, oder < crontab -h > für eine Kurzübersicht.

    Servus !

    RTFM = Read The Factory Manual, oder so

  • Sorry jungs jetzt muss ich nochmal lästig sein.

    Jetzt hab ich ein anderes Pi genommen (diesmal ein 3b) und da Buster installiert.

    Anschliessend hab ich einen Funksender 433mhz angeschlossen, wenn ich den Befehl in der Console eingebe schaltet die Steckdose, wenn ich das wieder über Crontab machen will natürlich wieder nicht.

    Ich hab jetzt aber überall den kompletten Pfad angegeben, ich poste nochmal den Code und die Crontab, vielleicht kann mir jemand sagen warums diesmal nicht klappt, danke.

    Ordner und Files wurden mit pi erstellt und Chmod +x

    crontab

    Code
    # Steckdose Groheblue on
    #* 6 * * * root /home/pi/send/groheblue_on.sh
    * * * * * root /bin/bash /home/pi/send/groheblue_on.sh
    
    
    # Steckdose Groheblue off
    #59 23 * * * root /home/pi/send/groheblue_off.sh
    #60 21 * * * root /home/pi/send/groheblue_off.sh

    Das Steuerprogramm send liegt unter /home/pi/raspberry-remote/

    Mein Script das den Logeintrag macht und das Steuerprogramm aufruft liegt unter /home/pi/send/

    Bash
    #!/bin/bash
    
    
    #GROHEBLUE_ON
    # Eintrag in Log schrieben
    echo "Groheblue ON -" $(date "+%d.%m.%Y - %H:%M") >> /home/pi/send/log.txt
    
    #sudo (Pfad zum Programm ./send)  (Funkcode: oben oben oben unten unten) (Unitecode = A = 1) (Status: 1=on, 0=off)
    sudo /home/pi/raspberry-remote/send 11100 1 1

    sieht jemand den Fehler oder mache ich generell was falsch mit dem Aufruf der Steuerdatei?

    Danke

    • Offizieller Beitrag

    wenn ich den Befehl in der Console eingebe schaltet die Steckdose

    Meinst Du damit nur den Befehl zum senden oder meinst Du damit wenn Du in der Konsole das Skript aufrufst, mit dem auch gelogt wird (groheblue_off.sh)?

  • crontab

    Was ist das für eine crontab und wie hast Du sie wo erzeugt?

    Siehe oben, nutze immer(sudo) crontab -e, dann wäre die Angabe des ausführenden Nutzers falsch.

    • Offizieller Beitrag

    Es wird wohl noch die Systemweite Crontab sein und ich bin immernoch der Meinung, das diese am RPi für "globale Nichtuseraufgaben" zu nutzen kein Fehler ist.

    Falscher empfinde ich eher alles ins Homedir von pi zu schieben was so an Skripten erstellt wird, vor allem was Ansteuerung von Hardware und nicht-pi-bezogen ist. Vermutlich ist das aber der Mischung beim RPi aus Multiusercomputer und elektronisches Gerät (*) geschuldet.

    *) Ein anderes Wort für Musikspieler / Gewächshauscontroller / Ambilight usw.

  • Es wird wohl noch die Systemweite Crontab sein und ich bin immernoch der Meinung, das diese am RPi für "globale Nichtuseraufgaben" zu nutzen kein Fehler ist.

    Jupp, wenn man denn weiß, was man so tut, gebe ich Dir uneingeschränkt recht. Wenn. ?

  • echo "Groheblue ON -" $(date "+%d.%m.%Y - %H:%M")

    Hier fehlt der Pfad zu "date"

    (sicher ist sicher)

    ----------------------------

    Ich schreibe bei jedem Script, das ich verbreche, hinter den Shebang, was dieses Script so macht.

    Und, nach dem Block an Komentaren im Script auch erst einmal

    Code
    PATH=/bin:/sbin:/usr/bin:/usr/sbin

    oder in welchen Pfaden die von mir verwendeten Programme und Scripte sonst so liegen, damit in in den späteren Zeilen diese Daten nicht immer hinschreiben muss.

    Computer ..... grrrrrr

  • Hallo Jungs,

    warum auch immer aber ich habs dann hinbekommen, beim dritten reboot hats dann geklappt :) hmm das soll einer verstehen.

    Es war immer noch die Globale Crontab!


    Danke nochmal, für die Hilfe, die Schaltung der Steckdosen in verbindung mit Cron funktioniert einwandfrei, tolle sache, nur die Reichweite ist nicht so toll, ich werde heute Abend mal einen Draht als Antenne anlöten :)

    Wünsche euch einen schönen Tag.

Jetzt mitmachen!

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