Рейтинг:0

Нужна ли для запуска скриптов Python, которые обновляют информацию в Интернете, виртуальная среда?

флаг ng

Некоторое время я пытался запланировать запуск скрипта python в cron два раза в день. Сценарий использует пару API для извлечения информации с веб-сайта и обновления электронной таблицы Google с информацией. Сценарий работает - я могу запустить его вручную без проблем, но когда я планирую его запуск из задания cron, я не вижу никаких результатов.

После небольшого устранения неполадок я наткнулся на эту страницу - https://cronitor.io/cron-reference/cron-troubleshooting-guide

Я прошел все предложенные шаги и добрался до сути, где написано:

«Для Python вы можете обнаружить, что ваше веб-приложение использует виртуальную среду, которую вам нужно вызвать в вашем crontab».

Как мне «вызвать виртуальную среду» в Ubuntu? Я сейчас нахожусь в такой ситуации, когда не знаю, как поступить. Если это поможет, я запускаю свой скрипт с Raspberry Pi 3b на Ubuntu 20.04.3 LTS, и мой скрипт использует API Googlesheets.

РЕДАКТИРОВАТЬ: Вещи, которые я сделал до сих пор для устранения неполадок:

  • У моего пользователя есть разрешения на запуск cron

  • Я использую прямые пути в своей работе cron

  • Я проверил хрон гуру, чтобы убедиться, что мое расписание cron установлено правильно так и есть.

  • Я получаю результат от задания cron, которое печатает дату и время в файл. (* * * * * /path/to/python3.8 /path/to/script/Script.py >> log.txt) так что я знаю, что это работает.

  • Я дал права на выполнение своего скрипта с помощью chmod +x Script.py

  • Я убедился, что у моего пользователя есть разрешение на запуск скрипта

  • Я убедился, что в конце файла cron есть пустая строка.

  • Я создал исполняемый файл оболочки, который выполняет скрипт

  • Я убедился, что cron использует то же время, что и системное время.

  • хвост -f /var/журнал/системный журнал показывает вывод для моего скрипта по расписанию раз, но когда я проверяю, была ли обновлена ​​​​моя таблица, это не

  • Я добавил shebang вверху своего скрипта Python.

user535733 avatar
флаг cn
Виртуальная среда *может* быть связана с тем, что скрипт Python не может обеспечить ожидаемый результат. Однако есть много общих причин, которые более вероятны. Скрипт, который просто возится с Googlesheets, не имеет очевидных причин нуждаться в виртуальной среде. Я подозреваю, что вы на ложном пути. Придерживайтесь основных способов устранения неполадок cron и python, пока не получите более четкие ответы.
Pocketmouse avatar
флаг ng
Есть ли у вас какие-либо предложения о том, что попробовать дальше? Я обновил свой пост тем, что уже пробовал (список был слишком длинным, чтобы публиковать его здесь в комментариях). Когда дело доходит до Ubuntu, я немного в невыгодном положении, поскольку я не так знаком с ней, как с python. Мне приходится все гуглить, и пока все, что я нашел, не помогает.
raj avatar
флаг cn
raj
Обратите внимание, что в цитируемой вами статье говорится о **веб-приложении** Python. Веб-приложения — это приложения, которые работают на веб-сервере, и, если они написаны на Python, они на самом деле часто используют виртуальную среду Python (venv). Это не ваш случай. Если вы просто вызываете свой скрипт из командной строки, он, вероятно, не использует venv (вы наверняка помните, что создавали для него venv, если бы это было так :)). Это скорее "классическая" проблема cron - значение `$PATH` или других переменных в cron отличается от интерактивной оболочки, и из-за этого ваш скрипт может не получить доступ к некоторым модулям. Исследуй это.
user535733 avatar
флаг cn
Ваше устранение неполадок показало, что с cron все в порядке. В 99% случаев cron работает правильно, и вы находитесь в этой группе. Ваше устранение неполадок также продемонстрировало, что вы понимаете, как правильно использовать cron и устранять неполадки (хорошая работа!). Поэтому пришло время сосредоточиться на вашем сценарии: добавьте в сценарий отладочные данные, которые будут отображаться в локальном журнале или файле. Используйте выходные данные отладки, чтобы определить, какая часть вашего скрипта вызывает проблемы.
Рейтинг:0
флаг in

Виртуальные среды Python — это автономные деревья каталогов, которые содержат установку Python для определенной версии Python, а также ряд дополнительных пакетов.

Допустим, ваш скрипт использует пакет «requests» для выполнения HTTP-запросов. Если вы установили запросы в виртуальной среде, вам необходимо убедиться, что виртуальная среда активна, когда ваш скрипт запускается из cron. В противном случае вы получите ImportError: нет запросов с именем модуля.

С другой стороны, если вы установили запросы для всей системы и не используете виртуальные среды, вам также не нужно беспокоиться о них в контексте cron.


Вот что я бы сделал, чтобы устранить вашу конкретную проблему: я бы добавил операторы регистрации в сценарий, чтобы проверить предположения и гипотезы: запускается ли сценарий вообще? Он работает полностью? Если он делает HTTP-запросы, какие HTTP-статусы он возвращает?

Возможно, сценарий выдает исключение, но это исключение нигде не регистрируется. Этот фрагмент захватывает только стандартный вывод:

* * * * * /path/to/python3.8 /path/to/script/Script.py >> log.txt 

Измените его, чтобы также захватить stderr:

* * * * * /path/to/python3.8 /path/to/script/Script.py >> log.txt 2>&1

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.