Задать вопрос
@olololollloo

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

система 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 все работает одинаково
  • Вопрос задан
  • 396 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@olololollloo Автор вопроса
помогла задержка времени sleep 10; на старте после перезагрузки севера

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


видимо что то не успевало запуститься
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Попробуй создать bash скрипт, где ты сначала выбираешь окружение, а потом запускаешь питоновский файл. И уже sh файл в cron или автозагрузку
Ответ написан
Комментировать
Procrastinationator
@Procrastinationator
Я не уверен на 100%, но вроде виртуалку нужно запускать как-то так: /home/my_project/venv/bin/activate
Но это я тыкнул в небо. По-хорошему, увидеть что выдаёт ваша консоль.

Если дело в этом, рекомендую создать bash скрипт:
#!/bin/bash

# Переход в директорию проекта
cd /home/my_project

# Активация виртуалки
source /home/my_project/venv/bin/activate

# Выполнить скрипт Python
python /home/my_project/test.py

И добавь ему права на выполнение: $ chmod +x run_cron.sh
Потом пропиши его в CRON:
@reboot /path/to/your/run_cron.sh
Ответ написан
Комментировать
@ceytnot
Работаю не по специальности (:
У меня в Кроне вот такая запись:
*/10 * * * * /var/py_proj/polikliniki_bot/bin/python3.9 /var/py_proj/polikliniki_bot/main_inform_user.py

Первым идет путь к виртуальному окружению, потом уже путь к скрипту.
У вас судя по всему наоборот. У меня Debian и у меня нет cd и &&, но возможно вам это необходимо т.к. является особенностью Убунты.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы