Как при запуске сервера, запустить CRON с нужным окружением python?

Рейтинг: 0Ответов: 2Опубликовано: 03.05.2023

система ubuntu у меня есть вот такой скрипт test.py:

#!/home/my_project/venv/bin/python3.11
import sys
sys.path.insert(1, '/home/my_project/')

with open('text.txt', 'a') as file:
    file.write('ok')

он создает text.txt файл с текстом 'ok'

и без первых трех строчек он не работал, с ними все хорошо

я запускаю его при запуске сервера:

@reboot cd /home/my_project && /home/my_project/venv/bin/python3.11 test.py

и все отлично

но если я использую какие то сторонние библиотеки, которые изначально нету в окружении, а надо установить, например добавляю в скрипт

from requests import request
res = request(method='get', url="https://www.google.ru/")
print(res)

то скрипт не запускается, мне кажется из-за того что он грузит не мое окружение, где был установлен pip install requests, а стандартное

но самое странное, что если запускать не при запуске сервера а каждую минуту

* * * * * cd /home/my_project && /home/my_project/venv/bin/python3.11 test.py

то скрипт отрабатывает даже с requests

как сделать так чтобы при перезапуске сервера, скрипт запускался с requests?

момент про 3.11: что так python3.11 что так python все работает одинаково

Ответы

▲ 0

сначала указываешь текущее окружение

env_name = "название текущего окружения"

потом добавляешь путь до virtualenv

activate_this = os.path.expanduser(os.path.join("~", ".virtualenvs", env_name, "bin", "activate_this.py"))
sys.path.insert(0, activate_this)

Должно помочь, мне помогло во всяком случае

▲ 0

помогла задержка sleep 10; сервера после перезагрузки

@reboot sleep 10; cd /home/my_project && /home/my_project/venv/bin/python3.11 test.py

видать что то не успевало прогрузится