Heiho,
ich hoffe ich bin hier damit richtig..
Ich versuche ein Python-Script per Cronjob zu starten und es will einfach nichts tun. In Cron habe ich eingetragen:
0 6 * * * /usr/bin/python3 /home/bengoshi/.bin/bibeltext/bibeltext.py
Ich habe den Teil "/usr/bin/python3 /home/bengoshi/.bin/bibeltext/bibeltext.py" mal so in die bash kopiert und dann tut das Script seinen Dienst. Über den Cronjob aber nicht. Im Syslog wird nur angezeigt
Mar 4 08:20:01 37056 /USR/SBIN/CRON[29255]: (bengoshi) CMD (/usr/bin/python3 /home/bengoshi/.bin/bibeltext/bibeltext.py)
(Die Uhrzeit weicht ab, da ich es mit mehreren Zeiten probierte).
Hat jemand eine Idee, woran es liegen könnte?
Danke und beste Grüße
bengoshi
Script per Cronjob starten
Woran würdest du denn merken, dass das Skript erfolgreich gelaufen ist? Produziert es irgendwelche Ausgaben, schreibt es in Dateien, etc.?bengoshi hat geschrieben: Ich habe den Teil "/usr/bin/python3 /home/bengoshi/.bin/bibeltext/bibeltext.py" mal so in die bash kopiert und dann tut das Script seinen Dienst. Über den Cronjob aber nicht.
Zuletzt geändert von nezzcarth am Samstag 4. März 2017, 10:53, insgesamt 1-mal geändert.
@bengoshi: leite am einfachsten die Ausgabe in eine Datei um, und schau, welche Fehler das Programm ausgibt:
[codebox=bash file=Unbenannt.bsh]
0 6 * * * /usr/bin/python3 /home/bengoshi/.bin/bibeltext/bibeltext.py &>/home/bengoshi/bibeltext.log
[/code]
Warum liegt das Programm in einem .bin Ordner?
[codebox=bash file=Unbenannt.bsh]
0 6 * * * /usr/bin/python3 /home/bengoshi/.bin/bibeltext/bibeltext.py &>/home/bengoshi/bibeltext.log
[/code]
Warum liegt das Programm in einem .bin Ordner?
Weil ich es da reingepackt habe
Das ganze lief einige Zeit auf meinem Festrechner und wurde von mir morgens per Hand gestartet. Jetzt will ich das automatisiert von meinem Webserver aus tun. Die Verzeichnisstrukturen etc habe ich übernommen.
Das ganze lief einige Zeit auf meinem Festrechner und wurde von mir morgens per Hand gestartet. Jetzt will ich das automatisiert von meinem Webserver aus tun. Die Verzeichnisstrukturen etc habe ich übernommen.
Mal ein Schuss ins Blaue:
Ich würde die Shebang konfigurieren, das das Skript ohne /usr/bin/python ausgeführt werden kann, damit du den Cron-Eintrag ohne Leerzeichen im Befehl erstellen kannst.
Edit:
Evtl noch chmod +x auf die Datei, sollte sie keine Ausführungsrechte haben.
Wenn du das Skript über den Pfad ohne vorangestellten /usr/bin/python starten kannst sollte es auch problemlos als Cron funktionieren.
Ich würde die Shebang konfigurieren, das das Skript ohne /usr/bin/python ausgeführt werden kann, damit du den Cron-Eintrag ohne Leerzeichen im Befehl erstellen kannst.
Edit:
Evtl noch chmod +x auf die Datei, sollte sie keine Ausführungsrechte haben.
Wenn du das Skript über den Pfad ohne vorangestellten /usr/bin/python starten kannst sollte es auch problemlos als Cron funktionieren.
Die Angaben von bengoshi deuten meiner Meinung nach darauf hin, dass das Problem nicht bei Cron liegt, sondern beim Skript (das allerdings wohl auch keine Fehlermeldung ausgibt). Entsprechend würde ich Sirius3s Vorschlag, sich die Fehlermeldungen in eine Datei schreiben zu lassen, unterstützen.Dirki hat geschrieben:Mal ein Schuss ins Blaue:
Ich würde die Shebang konfigurieren, das das Skript ohne /usr/bin/python ausgeführt werden kann, damit du den Cron-Eintrag ohne Leerzeichen im Befehl erstellen kannst.
Edit:
Evtl noch chmod +x auf die Datei, sollte sie keine Ausführungsrechte haben.
Wenn du das Skript über den Pfad ohne vorangestellten /usr/bin/python starten kannst sollte es auch problemlos als Cron funktionieren.
EDIT:
@bengoshi: In welchem Verzeichnis hast du die Befehle in der Bash ausgeführt? Das sollte zur Vergleichbarkeit im Home-Verzeichnis der Benutzers, als der der Cronjob ausgeführt wird, geschehen, da das ja als Arbeitsverzeichnis dient.
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
welches System benutzt du? Wenn du eins mit systemd hast, dann starte das Skript über eine systemd Service Unit. Dann loggt systemd für dich zumindest mit, wann und warum das Skript den Dienst verweigert.
Gruß, noisefloor
welches System benutzt du? Wenn du eins mit systemd hast, dann starte das Skript über eine systemd Service Unit. Dann loggt systemd für dich zumindest mit, wann und warum das Skript den Dienst verweigert.
Gruß, noisefloor
Vielen Dank für Eure Antworten!
Das Script hat eine Shebang, sprich es startet mit
Ich hatte anfangs auch versucht, „nur“ das Script in den cronjob einzutragen (also ohne /usr/bin/python3 vorher), ging aber auch nicht.
Ich habe die Ausgabe wie oben beschrieben mit &> in eine Datei leiten lassen. Ich hatte es vor dem Test selbst mit ursprünglich mit >> getan. Das Ergebnis ist leider gleich - es wird eine leere Datei angelegt. Das war's.
Das Syslog hilft mir jedenfalls auch nicht weiter:
Bei dem System handelt es sich um ein Debian 7.11, noch brav ohne systemd. Andere cronjobs verrichten ihre Dienste.
Die Scriptdatei hat als Ausführungsrechte 744, Benutzer und Gruppe sind gleich dem Benutzer des Cronjobs.
Wie gesagt, das Script direkt läuft..
Beste Grüße
bengoshi
Das Script hat eine Shebang, sprich es startet mit
Code: Alles auswählen
#!/usr/bin/env python3
Ich habe die Ausgabe wie oben beschrieben mit &> in eine Datei leiten lassen. Ich hatte es vor dem Test selbst mit ursprünglich mit >> getan. Das Ergebnis ist leider gleich - es wird eine leere Datei angelegt. Das war's.
Das Syslog hilft mir jedenfalls auch nicht weiter:
Code: Alles auswählen
Mar 5 19:15:01 37056 /USR/SBIN/CRON[12084]: (bengoshi) CMD (/home/bengoshi/.bin/bibeltext/bibeltest.py &>/home/bengoshi/.bin/bibeltext/bibeltest.log)
Die Scriptdatei hat als Ausführungsrechte 744, Benutzer und Gruppe sind gleich dem Benutzer des Cronjobs.
Wie gesagt, das Script direkt läuft..
Beste Grüße
bengoshi
@bengoshi: Ich würde sowohl die Standardausgabe als auch die Standardfehlerausgabe umleiten.
@bengoshi: Gute Frage. Ich mache es immer ”normal” mit einem extra 2>&1. Die Bash versteht das da wohl auch. Aber benutzt ``cron`` die auch? Was macht beispielsweise die ``dash`` damit?
Vielen Dank für Eure Hinweise! Mit weiterer Hilfe habe ich jetzt das Problem lösen können. Für andere, die vielleicht auch vor dem Problem mal stehen.. Im Script werden an verschiedenen Stellen Bezüge auf externe Daten. Da habe ich feste Pfade reingenommen.
Bei dem nachfolgenden Aufruf war es allerdings so, dass es nicht /usr/local/bin/yowsup-cli, sondern ohne Pfad:
Im crontab sah es dann so aus:
Dann lief das Script erstmal und es wurden tapfer Fehler geloggt und der Rest konnte angegangen werden.
Bei dem nachfolgenden Aufruf war es allerdings so, dass es nicht /usr/local/bin/yowsup-cli, sondern ohne Pfad:
Code: Alles auswählen
os.system('/usr/bin/python yowsup-cli demos --config /home/bengoshi/.bin/bibeltext/config-bengoshi -M --send ' + user_call_number_str + ' ' + '"' + bible_text + '"')
Code: Alles auswählen
*/1 * * * * "/home/bengoshi/.bin/bibeltext/testlauf.py" > /home/bengoshi/bengoshi-test.log 2>&1
@bengoshi: verwende niemals os.system, und erst recht nicht, wenn Du Daten einfügst, die potentiell nicht unter Deiner Kontrolle sind. Ich weiß nicht, wo oft in der Bibel die Worte stehen: »Und er ging nach $(rm -rf /) und alles war leer.«
Nimm das subprocess-Modul:
Nimm das subprocess-Modul:
Code: Alles auswählen
configfile = "/home/bengoshi/.bin/bibeltext/config-bengoshi"
subprocess.call(["/usr/bin/python", "yowsup-cli", "demos", "--config", configfile, "-M" ,"--send", str(user_call_number), bible_text])