Проблема была с переменными окружения, в частности, что $ PATH отличается для заданий, выполняемых программами cron и vs, которые я вызывал в терминале как вошедший в систему пользователь. Вызов echo $PATH
задания cron и проверка, включает ли он каталог интерпретатора python, может помочь подтвердить, что это проблема.
Два решения:
1) Быстрый и Грязный
Найдите, где установлен интерпретатор Python, и измените строку shebang в верхней части исполняемого файла / сценария unix, чтобы вызвать его напрямую. т.е.
#!/usr/bin/env python3
становится
#!/usr/local/bin/python3
Здесь не имеет значения, находится ли интерпретатор Python на пути или нет, потому что его местоположение задано явно. Недостатком является то, что его местоположение теперь жестко запрограммировано, и если вы переместите скрипт на другой компьютер, скрипт может не работать ни в cron, ни при запуске в терминале, если python был установлен в другом месте.
2) Менее быстрый, менее грязный
Напишите сценарий оболочки, который добавляет местоположение интерпретатора Python к пути, если его там еще нет (согласно этому вопросу SuperUser), а затем вызывает сценарий Python. Таким образом, сценарий не был изменен и не будет случайно сломан при перемещении его на компьютер, где python установлен в другом каталоге.
#!/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
Обязательно сделайте скрипт исполняемым через chmod +x /path/to/script/script.sh