Python-Skript/Unix-Executable wird im Terminal ausgeführt, schlägt als Cron/Launchd-Job fehl

Ich versuche, launchd so zu konfigurieren, dass es ein Python-Skript/eine ausführbare Unix-Datei (d. h. ein Python-Skript mit Kabelbaum
) auslöst. Wenn ich die .plist-Datei (unten) lade, zeigt launchctl einen Status von 127 an, was bedeutet: "Der angegebene Dienst wurde nicht mit dem Betriebssystem ausgeliefert". Wenn ich jedoch den Wert, den ich für "program" in der .plist-Datei eingegeben habe, kopiere und in das Mac-Terminal einfüge, läuft es gut.

Ich habe stdout/stderr an das Terminal umgeleitet (über die . Ich habe stdout/stderr zum Terminal umgeleitet (über die . plist) und es gibt die Meldung,

$ env: python3: No such file or directory

Wenn ich den Wert von Program in der plist durch ein einfaches 'hello world' esque Batch-Skript ersetze, funktioniert es einwandfrei.

Warum läuft das Python-Programm (urlwatch) im Terminal einwandfrei, gibt aber einen Fehler zurück, wenn es über launchd aufgerufen wird? Wie kann ich das beheben?

Plist-Datei:




    
        Label
        local.careersWatch3
        Program
        /Users/justinmichael/Documents/urlwatch-master/urlwatch
        RunAtLoad
        
        StandardOutPath
        /dev/ttys000
        StandardErrorPath
        /dev/ttys000
    

I möchte das Skript eventuell zu bestimmten Tageszeiten ausführen, aber im Moment verwende ich RunAtLoadtrue = $ launchctl load ~/Library/LaunchAgents/local.careerswatch3.plist
$ env: python3: No such file or directory
zu Testzwecken, bis ich es zum Laufen bekomme.

Laden in launchd und Ausgabe:

$ launchctl list | grep local.careersWatch3
-   127 local.careersWatch3

Call um den Status des Agenten und die Ausgabe zu überprüfen:

$ launchctl error 127
127: The specified service did not ship with the operating system

Looking die Bedeutung des Codes '127' im Terminal:

  • Gibt es einen Grund, warum Sie nicht cron verwenden?
  • Ich habe versucht, das gleiche Programm mit cron auszuführen, aber es passiert nichts. Im Systemprotokoll erhalte ich: "cron[7747]: kein Pfad für Adresse 0x109aa6000". Ich vermute, dass dies auf das gleiche Problem hindeutet, dass keine zugehörige Datei gefunden werden kann. Meine beste Vermutung (ganz allgemein) ist, dass es ein Problem mit Umgebungsvariablen (z. B. dem Pfad) gibt, die zwischen dem Ausführen im Terminal und dem Aufruf über launchd/cron nicht übereinstimmen, aber ich bin mir nicht sicher, wie man das beheben kann.
  • macOS 10.13 wird mit Python 2.7.10 ausgeliefert, daher gibt es standardmäßig keine ausführbare Datei "python3". Haben Sie es über Ports oder Homebrew hinzugefügt? Wenn ja, befindet es sich wahrscheinlich in /usr/local/bin. Ich würde daran arbeiten, das Skript im Terminal als der Benutzer laufen zu lassen, unter dem Sie das launchd-Skript ausführen wollen. Das macht die Fehlersuche viel einfacher.
  • Ja, python3 wurde installiert und es gibt eine ausführbare Datei mit diesem Namen in /usr/local/bin. Das Python-Skript, das ich ausführe (in Form einer ausführbaren Unix-Datei) funktioniert gut im Terminal, was Teil meiner Verwirrung ist.
  • Sie haben Recht, dass es ein Problem mit den Umgebungsvariablen war (ich habe es zum Laufen gebracht, werde die Antwort in Kürze posten). Ich habe zuvor LaunchControl ausprobiert, ohne Erfolg, aber danke für den Vorschlag. Ich vermute, dass LaunchControl nicht funktioniert hat, weil das Problem nicht mit dem Job (d.h. der .plist-Datei), sondern mit den Umgebungsvariablen im Zusammenhang mit dem ausgeführten Programm lag.
  • Bei der Suche nach einer Lösung für das Problem wurde mir klar, dass ich das, was ich tat, falsch verstanden hatte und meine Beschreibung daher wahrscheinlich irreführend war. Ich beschrieb den Python-Code als kompiliert, obwohl es sich eigentlich um unkompilierten Python-Code handelte, der mit einer Shebang-Zeile ausführbar gemacht wurde. Ich hatte fälschlicherweise "lauffähig" mit "kompiliert" in einen Topf geworfen. Ich habe die Frage inzwischen aktualisiert, um diesen Fehler zu korrigieren, aber das Problem ohne diese Information zu lösen, wäre praktisch unmöglich gewesen. Meine aufrichtige Entschuldigung @MMB! Trotzdem vielen Dank für Ihre Hilfe.

OriginalAutor JMikes | 2018-02-11

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.