Cronjob funktioniert nicht

Merlok

Neues Mitglied
Thread Starter
Dabei seit
09.02.2017
Beiträge
8
Reaktionspunkte
0
Ich habe auf meinem OS X Server ein python Script welches ich gern einmal alle 15 Minuten aufrufen möchte.
Leider klappt der Cronjob dafür allerdings nicht. Ich habe den Cronjob testweise auf 1 Minute gestellt um schneller zu sehen ob was passiert, aber es tut sich rein gar nichts.

Der Cronjob ist der folgende:
1 * * * * /Users/administrator/Documents/DLSpeed/connection_speed.py

Woran liegt es dass das Script nicht automatisch ausgeführt wird? :(
 
DAs weißt Du:
... cron is not a recommended solution. It has been deprecated in favor of launchd.
Gruß
win2mac
 
Totgesagte leben länger ;)
 
Danke für eure Antworten. Die Einstellung des Cronjobs auf den Wert von roedert bringt leider keine Besserung. Es funktioniert weiterhin nicht.

launchd hatte ich auch versucht und habe dafür eine .plist Datei angelegt. Das klappt aber auch nicht.
Entweder bin ich zu blöd das hinzubekommen oder es geht einfach nicht mit python Skripts.
 
hat dein python script denn auch als erste zeile das shebang?
#!/usr/bin/python

sonst musst du halt das in den job aufruf noch den pyhton aufruf mit rein packen …
 
Das plist File was ich erstellt habe liegt im Ordner /Library/LaunchDaemons und sieht momentan so aus:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.mycompanyname.mydepartment.mytaskname</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/myuser/Dashboard/mytask.sh</string>
    </array>
    <key>StartInterval</key>
    <integer>300</integer>
</dict>
</plist>

In der ersten Zeile vom python Skript steht
Code:
#!/usr/bin/env python3
Soll ich das durch den Code von Dir ersetzen?

edit:
Nicht das Missverständnisse aufkommen! Den Taskname und den String zum Skript habe ich natürlich geändert. Das war die Beispieldatei. ;)
 
Funktioniert denn der Aufruf /usr/bin/env python3 auf der Kommandozeile?
Oder anders gefragt, kannst du dein Script mit /Users/administrator/Documents/DLSpeed/connection_speed.py direkt ausführen?
 
python3 wird das problem sein, weil OS X nur 2.x mitbringt.
 
cron hat kein Environment, Pfade etc. die man als selbstverständlich voraussetzt müssen hier explizit gesetzt werden ($PATH...). Darauf würde ich mal prüfen.
 
Also python3 habe ich separat installiert, und das Skript kann ich auch manuell aufrufen und dann funktioniert es auch soweit.

Der Aufruf von "/usr/bin/env python3" per Terminal funktioniert auch, ich bekomme als Ausgabe dann:
Code:
Python 3.6.0 (v3.6.0:41df79263a11, Dec 22 2016, 17:23:13)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
angezeigt.

Das mit den Pfaden die explizit gesetzt werden müssen habe ich leider nicht verstanden. Ich kenne mich jetzt nicht so sehr damit aus.
Was genau ist darunter zu verstehen?

Ob ich das Ganze jetzt per cronjob oder LaunchDaemon zum Laufen bringe ist mir eigentlich egal. Hauptsache es läuft überhaupt automatisch.

Und sorry dass ich erst immer Abends antworte. Ich habe relativ lange Arbeitstage.
 
wenn du python3 nicht in einem standardpfad hast, wird es nicht gefunden.

wenn cronjobs fehlschlagen oder eine ausgabe produzieren, müsstest du eigentlich mails kriegen.
-> mail im terminal.
 
Also eine Mail oder eine sonstige Ausgabe habe ich bisher nicht bekommen. Ich gehe davon aus dass python3 im Standardpfad installiert wurde, da ich bei der Installation den Pfad oder das Laufwerk nicht geändert habe.
 
Das mit den Pfaden die explizit gesetzt werden müssen habe ich leider nicht verstanden. Ich kenne mich jetzt nicht so sehr damit aus.
Die Befehle genau wie die Aufrufe von Befehlen, die sind doof und müssen gesagt bekommen, wo die Dateien liegen, auf die sie zugreifen sollen.
Es reicht nicht, zu tippen "befehl", wenn diese Datei namens "befehl" irgendwo liegt außerhalb des Ordners, in dem du gerade bist (und auch dann müsstest du "./befehl" tippen), du musst entweder in einer bestimmten Datei den Pfad eintragen oder jedesmal den kompletten Pfad eintippen.
"befehl" könnte es ja beliebig oft an diversen Orten geben. So wie es zahllose Readme-Dateien geben dürfte auf deinem Rechner. Würdest du da einfach "ReadMe" aufrufen können, käme auch nicht unbedingt die, die du suchst.
So mal als Grundlage.
 
du kriegst die mailbenachrichtigung ins terminal, nicht in mailprogramme wie apple mail.
unter welchem user läuft denn der cronjob? unter dem musst du auch nachsehen – die mbox liegt im jeweiligen $HOME.

zeig doch mal "which python3".
 
Ok, soweit habe ich das verstanden. Danke Schiffversenker.
Aber jetzt wieder eine blöde Frage dazu: Reicht es dann nicht so wie ich es gemacht habe den Pfad im Format /Folder/Folder/Skript.py anzugeben? Das sollte doch von OS X verstanden werden, oder nicht?

which python3 zeigt mir an:
Code:
/usr/local/bin/python3
 
... Reicht es dann nicht so wie ich es gemacht habe den Pfad im Format /Folder/Folder/Skript.py anzugeben? Das sollte doch von OS X verstanden werden, oder nicht?

das ist ja nicht das Problem. Sondern der Inhalt deines scripts.
Gruß
win2mac
 
cron hat default den $PATH:
Code:
X-Cron-Env: <PATH=/usr/bin:/bin>
dein python3 wird also eher nicht gefunden.
---
which python3 zeigt mir an:
Code:
/usr/local/bin/python3
bau das als shebang in dein script oder mach das in #6 gesagte
oder
Code:
PATH=/usr/local/bin:/usr/bin:/bin
in die crontab.
---
das ist ja nicht das Problem. Sondern der Inhalt deines scripts.
Gruß
win2mac
da steht halt python-zeuch drin. :p
 
Zuletzt bearbeitet:
Ich hab jetzt die erste Zeile von meinem python Skript durch folgendes ersetzt:
Code:
#!/usr/local/bin/python3

Leider wird das Skript weiterhin nicht automatisch ausgeführt. Manuell klappt es aber immer noch.

Edit:
Ich hab jetzt auch die PATH Angabe in das crontab eingefügt. Jetzt funktioniert es per cronjob! :)

Blöde Frage:
Wenn ich es jetzt alle 15 Minuten laufen lassen will, wie lautet dann die korrekte Angabe?
*/15 * * * *
?
 
Genau .... */15 heisst alle 15 min
 
Zurück
Oben Unten