Как запустить файл 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 шт):
Я предполагаю, что под "но естественно хостинг не позволяет работать скрипту в режиме ожидания
" вы имеете ввиду, что если запустить run.py
и разорвать SSH соединение, то процесс run.py
падает. Это нормально, иначе было бы сложно уследить за всеми процессами запущенными через SSH.
Если вы хотите чтобы run.py
работал в фоновом режиме можно запустить его через утилиту screen
(просто и быстро) или создать сервис для systemd
чтобы линукс сам запускал бота, точно так же как он, например, запускает sshd, который отвечает за SSH подключения (сложно, но надёжно).
Запуск через утилиту screen:
- Устанавливаем утилиту
apt install screen
- Создаём сессию
session_name
где потом будет запущенrun.py
screen -S session_name
- Находясь внутри сессии запускаем файл
cd /path/to/folder source /path/to/venv/bin/activate python run.py
- Теперь процесс будет работать в сессии
session_name
даже если вы отключитесь от SSH. Если вы не хотите отключаться от SSH, то можно отсоединиться от сессии нажав CTRL+A+D - Если нужно обратно присоединится к сессии
session_name
можно использовать командуscreen -x session_name
Утилита screen
, как по мне, один из самых простых способов запускать что-то на фоне, для образовательных целей. Но никогда не используйте её для production продукта.