Das Problem lag bei den Umgebungsvariablen, insbesondere, dass sich $ PATH für Jobs unterscheidet, die von cron-vs-Programmen ausgeführt werden, die von mir im Terminal als angemeldeter Benutzer aufgerufen wurden. Der Aufruf echo $PATH
in einem Cron - Job und prüfen, ob das Verzeichnis des Python - Interpreter enthält helfen kann, um zu bestätigen, das ist das Problem.
Zwei Lösungen:
1) Schnell und schmutzig
Suchen Sie nach, wo der Python-Interpreter installiert ist, und ändern Sie die Shebang-Zeile oben im unix-Programm für ausführbare Dateien / Python, um sie direkt aufzurufen. dh
#!/usr/bin/env python3
wird
#!/usr/local/bin/python3
Dabei spielt es keine Rolle, ob sich der Python-Interpreter im Pfad befindet oder nicht, weil sein Ort explizit angegeben wird. Der Nachteil ist, dass der Speicherort jetzt hartcodiert ist. Wenn Sie das Skript auf einen anderen Computer verschieben, funktioniert das Skript möglicherweise nicht, weder in cron noch im Terminal, wenn Python an einem anderen Speicherort installiert wurde.
2) Weniger schnell, weniger schmutzig
Schreiben Sie ein Shell-Skript, das den Pfad des Python-Interpreters zu dem Pfad hinzufügt, wenn er nicht bereits vorhanden ist (wie in dieser SuperUser-Frage), und dann das Python-Skript aufruft. Auf diese Weise wurde das Skript nicht geändert und nicht versehentlich gebrochen, indem es auf einen Computer verschoben wird, auf dem Python in einem anderen Verzeichnis installiert ist.
#!/bin/bash # directory python is found in dir="usr/local/bin" #add to path if not there if [ -d "$dir" ] && [[ ":$PATH:" != *":$dir:"* ]]; then PATH="$$dir" fi #Run program /path/to/program/program_name
Stellen Sie sicher, dass das Skript über ausführbar ist chmod +x /path/to/script/script.sh