Почему бот не запускается
Что делать, если бот не запускается: разбор по строкам консоли — от ненайденного файла запуска до нехватки памяти — и кто именно каждый из этих случаев чинит.
Бот не поднялся, и единственное достоверное свидетельство о причине — строки консоли. ⏱️ Разбор занимает минут пять. Главное, что он даёт, — понимание, ЧЬЯ это ошибка: часть случаев чинится тарифом, часть настройками, и только часть кодом.
Откройте вкладку «Консоль» и включите фильтр «Ошибки». Найдите свою строку в первой колонке таблицы и переходите к её разделу.
Все причины одной таблицей
| Что в консоли | Что случилось | Чем чинится |
|---|---|---|
| Файл … не найден. Загрузите код бота через файловый менеджер | Запускать нечего: файла с таким именем в каталоге нет | настройками или пересборкой архива |
ModuleNotFoundError, Cannot find module | Библиотека не установлена, а код её просит | кодом: списком библиотек |
No matching distribution, Failed building wheel, npm ERR! | Установка библиотек упала, до кода дело не дошло | кодом; иногда только переездом на VPS |
TelegramUnauthorizedError, 401 Unauthorized, InvalidToken | Платформа не приняла токен | настройками |
Killed, out of memory | Процесс сняли за выход за память тарифа | тарифом |
No space left on device, ENOSPC | На диске кончилось место | тарифом или уборкой в файловом менеджере |
Трассировка, SyntaxError, TypeError | Окружение поднялось, бот упал внутри своего кода | кодом |
| Сервер поднимается и падает по кругу, потом замолкает | Панель остановила перезапуски | кодом, после разбора лога |
| Понятной строки нет вовсе | Разобрать не удалось | последними строками перед остановкой |
Файл запуска не найден
В консоли стоит наша собственная строка — единственная в этом разборе, чей текст написали мы: «Файл bot.py не найден. Загрузите код бота через файловый менеджер панели и запустите сервер снова.» Вместо bot.py в ней стоит то, что записано в поле «Файл запуска». Печатает её обёртка ещё до запуска кода: она проверяет файл заранее, чтобы вы читали объяснение по-русски, а не MODULE_NOT_FOUND от интерпретатора.
- В поле «Файл запуска» написано не то. Путь считается от корня каталога сервера, поэтому
main.pyпри коде внутри папкиsrc— это ненайденный файл. Полное имя с папкой писать можно и нужно:src/main.py. - Архив распакован вместе со своей внешней папкой. В корне лежит одна папка
my-bot, а файл запуска — внутри неё. Заодно это лишает бота и библиотек; разбор — в статье про загрузку бота. - Файл переименован или не доехал. Загрузка, прерванная закрытой вкладкой, оставляет в каталоге неполный файл или не оставляет ничего.
Не хватает библиотеки
ModuleNotFoundError: No module named у Python, Error: Cannot find module у Node.js. Значит, интерпретатор дошёл до import и не нашёл того, что просят. Библиотеки ставятся перед каждым запуском, а не при установке, — поэтому вопросов здесь два: есть ли библиотека в списке и виден ли сам список.
- Библиотеки нет в
requirements.txtилиpackage.json. Допишите её и перезапустите сервер. - Списка нет вовсе. Тогда в консоли не было и строки
[hcp] установка зависимостей: без файла списка установка не запускается. - Список лежит внутри вложенной папки. Для проверки в корне каталога сервера это то же самое, что его нет.
- У Python есть свой подвох:
pyproject.tomlилиPipfileвместоrequirements.txt. Язык по ним опознаётся, а установка включается только поrequirements.txt— именно его проверяет стартовая команда. - Переключатель «Ставить зависимости при запуске» выключен, а библиотеки рядом не лежат.
Библиотеки не установились
Случай другой: до кода бота дело не дошло вовсе. Строки бывают разные — Could not find a version that satisfies, No matching distribution found, Failed building wheel for, npm ERR!, ERESOLVE could not resolve, — а смысл один: установка завершилась ошибкой, и запуск отменён. В логе видно, какая именно строка списка не встала.
- Такой версии нет.
Could not find a versionозначает, что запрошенной версии под наш Python не выпускали. - Библиотеке нужен компилятор.
Failed building wheel— это попытка собрать её из исходников: готового пакета под образ не нашлось. Компилятора в контейнере нет, и поставить его туда некуда. Такой библиотеке нужен VPS, где системой распоряжаетесь вы. - Зависимости спорят между собой.
ERESOLVEу npm — это несовместимые требования двух пакетов, и разрешает их только автор проекта.
Платформа не приняла токен
TelegramUnauthorizedError, Unauthorized, 401, InvalidToken — бот запустился, дошёл до подключения и получил отказ. Код здесь ни при чём: платформа не узнала токен. У Discord к этому же разряду относится DisallowedIntents — бот просит права, которые ему в портале разработчика не включили.
- Токен отозван у @BotFather. Отзыв действует мгновенно, старая строка перестаёт работать сразу.
- В поле лежит токен другого бота. Бывает у тех, у кого их несколько.
- Токен вписан в код, а не взят из окружения. Тогда в панели он верный, а бот использует старую строку из своего файла.
- Тот же токен уже работает на другой площадке. Обновления получит только один процесс, и какой именно — заранее неизвестно.
Заменить токен — в поле «Токен бота» во вкладке «Настройки игры». Сохранённое значение панель не покажет: под полем стоит «Сохранён. Введите новый, чтобы заменить». Пробел, кавычку или перевод строки форма не примет вовсе — в значении разрешены только буквы, цифры, точка, двоеточие, дефис и подчёркивание. После сохранения нужен перезапуск: токен уходит в окружение в момент старта.
Не хватило памяти
В консоли одно слово — Killed, без объяснений и часто среди пятнадцати строк чужой трассировки. Печатает его ядро, когда снимает процесс, вышедший за память тарифа. У Node.js вместо этого бывает строка про heap out of memory: V8 упирается в свой предел раньше ядра. Разницы для вас нет никакой — это одно и то же событие.
Кончилось место на диске
No space left on device или ENOSPC. Пока места нет, бот не запишет ни базу, ни кэш библиотек, а установка зависимостей падает самой первой. Посмотрите, что лежит в каталоге: логи, которые бот пишет сам, старые архивы, оставшиеся после распаковки, node_modules от прежней версии проекта. Всё это удаляется в файловом менеджере.
Бот падает по кругу
На ноде включён детектор падений: упавший сервер она поднимает заново, чтобы о падении вы узнали не из жалоб пользователей. Из этого следует важное: круг «работает — упал — работает» означает не случайную неудачу, а одну и ту же причину на каждом обороте. Пять падений за десять минут панель считает петлёй — перезапуски останавливаются на четверть часа, а сервер переходит в «Ошибку».
Читать при этом надо последние строки перед ПЕРВЫМ падением, а не перед последним: к пятому обороту лог забит одинаковыми попытками, а причина стоит в самом начале. Разобрались и поправили — запустите сервер кнопкой «Запустить», ждать конца паузы не обязательно.
Бот запустился и упал
Трассировка, SyntaxError, IndentationError, TypeError, ReferenceError, необработанное обещание — окружение поднялось, а ошибка произошла внутри кода. Панель здесь помочь не может и не притворяется, что может: последние строки лога называют файл и строку, на которых бот остановился, а дальше это обычная отладка.
Одну причину такого падения стоит проверить до всех остальных — версию. В контейнере стоит Python 3.12 или Node.js 22, то есть то, что записано в шаблоне. Код, который у вас на компьютере работает на другой версии, здесь может упасть на первой же строке незнакомого синтаксиса.
Ни одна строка не подошла
Бывает и так, и выдумывать причину в этом случае хуже, чем признать её отсутствие. Смотрите последние строки перед остановкой — там она обычно и стоит. Дальше идёт вкладка «Задачи»: она показывает всё, что панель делала с сервером, и по каждой записи видно, чем дело кончилось. Если задача давно висит в «Выполняется», во вкладке «Сервер» есть кнопка «Синхронизировать состояние» — она сверяет записанное в панели с тем, что видит нода, и файлов не трогает.
Сводка: кто что чинит
| Чинится | Что именно | Где это делают |
|---|---|---|
| Тарифом | Нехватка памяти, кончившееся место на диске | сменой тарифа на более крупный |
| Настройками сервера | Ненайденный файл запуска, непринятый токен, выключенная установка библиотек | вкладка «Настройки игры» |
| Файлами | Архив с внешней папкой, мусор и старые логи на диске | вкладка «Файлы» |
| Только в коде | Отсутствующая библиотека, несобираемая библиотека, падение внутри бота | у вас, и панель говорит это прямо |