Как запустить файл python (file.py) на хостинге? Может php кодом это как-то можно сделать?

Есть хостинг. На основном сайте создал поддомен тип (pd.site.com) На этом поддомене установил и активировал виртуальное окружение для python. Разместил там простенький стартовый файл run.py (простенький телеграм бот)

Из виртуального окружения запускаю файл

python run.py

бот работает, но естественно хостинг не позволяет работать скрипту в режиме ожидания. Процесс сбрасывается хостингом через некоторое время. Я так понимаю нужен php файл, который связан вэбхуком с ботом может запустить run.py Есть ли такая возможность? И как выглядит скрипт, который способен запустить run.py? Прилагаю картинку файлов на сайте, может она поможет получить правильный ответ.

Файл bt.php это тот файл, который должен бы запустить run.py

index.php пустой


Ответы (1 шт):

Автор решения: dofi4ka

Я предполагаю, что под "но естественно хостинг не позволяет работать скрипту в режиме ожидания" вы имеете ввиду, что если запустить run.py и разорвать SSH соединение, то процесс run.py падает. Это нормально, иначе было бы сложно уследить за всеми процессами запущенными через SSH.

Если вы хотите чтобы run.py работал в фоновом режиме можно запустить его через утилиту screen (просто и быстро) или создать сервис для systemd чтобы линукс сам запускал бота, точно так же как он, например, запускает sshd, который отвечает за SSH подключения (сложно, но надёжно).

Запуск через утилиту screen:

  1. Устанавливаем утилиту
    apt install screen
    
  2. Создаём сессию session_name где потом будет запущен run.py
    screen -S session_name
    
  3. Находясь внутри сессии запускаем файл
    cd /path/to/folder
    source /path/to/venv/bin/activate
    python run.py
    
  4. Теперь процесс будет работать в сессии session_name даже если вы отключитесь от SSH. Если вы не хотите отключаться от SSH, то можно отсоединиться от сессии нажав CTRL+A+D
  5. Если нужно обратно присоединится к сессии session_name можно использовать команду
    screen -x session_name
    

Утилита screen, как по мне, один из самых простых способов запускать что-то на фоне, для образовательных целей. Но никогда не используйте её для production продукта.

→ Ссылка