Найти тему

Запуск чат-бота Telegram, написанного на Python, на хостинге Beget (Часть 3: Запуск, запуск в фоновом режиме, по расписанию, отключение)

Оглавление

Часть 1: Подготовка

Часть 2: Установка окружения Python на хостинге Beget

Часть 3: Запуск, запуск в фоновом режиме, запуск по расписанию, отключение

На этом этапе у нас имеется:

1. Написанный и размещенный на хостинге код чат-бота.

2. Установленное окружение Python 3.12.

3. Специальное программное обеспечение PuTTy для доступа по SSH.

🚩 ПРОСТОЙ ЗАПУСК ЧАТ-БОТА

Чтобы запустить чат-бота, нам необходимо подключиться к серверу по SSH и зайти в Docker, в котором у нас установлено окружение Python 3.12. Всё это мы делали в Части 2. Поэтому просто напомню порядок команд, а подробности можно посмотреть в Части 2.

1. Запускаем Putty. Вводим логин и пароль для доступа.

2. Запускаем Docker командой:

ssh localhost -p222

и ещё раз вводим пароль для входа.

3. Запускаем чат-бот командой:

python3.12 ~/RDbot/RDbot.py

~/RDbot/RDbot.py - это путь до чат-бота от домашней директории, у ваc он будет свой.

Чат-бот должен запуститься и заработать.

Но! Как только вы закроете терминал - чат-бот работать перестанет. Потому что он запущен внутри терминальной сессии.

🚩 ЗАПУСК ЧАТ-БОТА В ФОНОВОМ РЕЖИМЕ

Чтобы каждый раз не запускать чат-бота и не держать терминал открытым (что не отличается по сути от того, чтобы держать чат-бота на своем компьютере), его надо запускать в фоновом режиме. Терминал закрыли, чат-бот продолжает работать. Для этого к команде запуска просто надо дописать слово nohup в начале и поставить знак & в конце:

nohup python3.12 ~/RDbot/RDbot.py &

После этого можно закрыть терминал, чат-бот продолжит работать.

❗❗❗ ВАЖНОЕ ОТСТУПЛЕНИЕ ❗❗❗

Чат-бот теперь стал фоновым процессом на вашем хостинге Beget. Но нужно понимать, что любой фоновый процесс на хостинге не длится по правилам хостера более 10 часов. И в какой-то момент он будет отключен. Предугадать время отключения не получится. Это регламентные процедуры и когда проводит их хостер, знает только он. В 100% случаях чат-бот не переживет ночь. Но если вы его запустите утром, не факт, что он проработает ровно 10 часов. Может отключиться раньше, а может не отключиться и за 12 часов и прожить до следующей ночи.

Ссылка на Правила пользования услугами хостинга

И конкретно выписка из пункта 6.

6. На ресурсах Исполнителя запрещается:
размещение приложений, работающих в фоновом режиме (демонов) на тарифах виртуального и VIP хостинга без предварительного согласования с ООО «Бегет»;

Поэтому, если у вас уже оттестированный и с высоким спросом от пользователей чат-бот, есть смысл рассмотреть его размещение на выделенном сервере, то есть по технологии VPS. За отдельную плату, естественно.

Но мы чат-бот продолжаем тестировать, нагрузка от него практически незаметная. Поэтому встает вопрос - как запускать чат-бот, когда он "умирает", чтобы каждый раз не подключаться к серверу по SSH через PuTTy.

График нагрузки на сайт можно посмотреть на главной панели хостинга
График нагрузки на сайт можно посмотреть на главной панели хостинга

❗❗❗ КОНЕЦ ВАЖНОГО ОТСТУПЛЕНИЯ ❗❗❗

🚩 ЗАПУСК ЧАТ-БОТА В ФОНОВОМ РЕЖИМЕ ПО РАСПИСАНИЮ

Итак, нам "надоело" каждый раз заходить на сервер через PuTTY, вводить логин, дважды вводить пароль, выполнять команды, когда чат-бот отключается (хостер "убивает" фоновые процессы на хостинге).

Поэтому мы настроим планировщик заданий CronTab. Он тоже находится в главной панели хостинга.

Левая нижняя кнопка - CronTab
Левая нижняя кнопка - CronTab

Мы разместим в нем нашу команду запуска чат-бота в фоновом режиме из Docker (не делайте это прямо сейчас, прочитайте текст ниже).

ssh localhost -p222 nohup ~/.local/bin/python3.12 ~/RDbot/RDbot.py &

Но!!! Эта команда сразу не заработает. Дело в том, что когда мы подключаемся по SSH, мы вводим логин и пароль, и когда запускаем Docker тоже вводим пароль. Поэтому нам надо обеспечить "прямой путь" до Docker, чтобы этот пароль не вводить.

Для этого есть способ, описанный самим хостером (правда не в документации, а в ВК). Даю ссылку на полный текст. В этом тексте есть отдельный пункт по запуску скриптов на Python в CronTab.

Скрипты на Рython на виртуальном хостинге возможно запустить только из виртуального окружения Docker, но так как для входа в docker требуется ввод пароля, нужно сначала пробросить в него ключ.

Следуем инструкции. Снова заходим в PuTTy, подключаемся к серверу по SSH.

И выполняем следующие команды:

ssh-keygen -t rsa

Нажимаем enter, пока ключ не будет сгенерирован. Пробрасываем его в докер командой:

ssh-copy-id '-p222 -i ~/.ssh/id_rsa.pub localhost'

Теперь вводим свой пароль. Если все сделано верно, то вход в Docker по команде:

ssh localhost -p222

будет происходить без запроса пароля.

Теперь полную команду запуска скрипта можно разместить в CronTab. Вы можете запустить ее в подменю "Запустить скрипт" - Произвольная команда.

-3

Или можете настроить расписание через "Мастер заданий" или "Составить задание вручную" - результат в этом случае будет один.

-4

Моя задача выглядит так, что чат-бот запускается с понедельника по воскресенье в 4:01 утра. Можно было указать просто, что каждый день, но в этом случае почему-то он запускался не каждый день (это просто заметка из опыта тестирования). С днями недели запускался стабильнее.

Из CronTab скрипт можно запустить сразу принудительно, независимо от расписания, достаточно нажать на кнопочку "Запустить" (зеленая стрелка вправо в зеленом круге).

-5

🚩 ОТКЛЮЧЕНИЕ ЧАТ-БОТА

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

Если чат-бот уже работает, второй раз он запуститься не должен. Но чтобы точно процессы не задвоились, не затроились и т.д. - лишние лучше все-таки отключать.

Пример команды по принудительному отключению всех скриптов работающих в данных момент на Python3.12.

ssh localhost -p222 killall python3.12

На этом тема по запуску чат-бота, разработанного на Python 3.12, на хостинге Beget окончена.

Спасибо всем за проявленный интерес и прочтение!