botdepobotdepoВсе статьи

11 октября 2026 г.

Бот запускается и сразу падает: как найти причину в логе

Бота запустили на сервере, через секунду он остановился. На хостинге статус «упал» или «exited», systemd пишет status=1/FAILURE, а сам бот молчит. Причина почти всегда уже написана — в последних строках лога. Ниже как её найти и что значат самые частые варианты.

Где смотреть лог

Как читать traceback: снизу вверх

Python при падении печатает «трейсбек» — путь, по которому шла программа до ошибки. Пример:

Traceback (most recent call last):
  File "/app/bot.py", line 3, in <module>
    from config import TOKEN
  File "/app/config.py", line 2, in <module>
    TOKEN = os.environ["BOT_TOKEN"]
  File "<frozen os>", line 714, in __getitem__
KeyError: 'BOT_TOKEN'
  1. Самая последняя строка — это и есть ошибка. Здесь KeyError: 'BOT_TOKEN': переменной окружения BOT_TOKEN нет.
  2. Чуть выше — последнее место в вашем коде, где это произошло: config.py, строка 2. Строки из библиотек и <frozen …> пропускайте, они почти никогда не виноваты.
  3. Всё, что выше, — как программа туда пришла. Обычно это читать не нужно.

Если трейсбеков несколько, нужен последний, а не первый. Строка с ошибкой — то, что стоит копировать в поиск.

Частые причины и где про них подробно

  1. ModuleNotFoundError: No module named … — библиотека не установлена: её нет в requirements.txt. Разбор.
  2. ImportError: cannot import name 'executor' — код под aiogram 2, а стоит aiogram 3. Разбор.
  3. Unauthorized, TokenValidationError, KeyError: 'BOT_TOKEN' — токен не передан или неверный. Разбор.
  4. can't open file … No such file or directory — запускается не тот файл или его нет в репозитории. Разбор.
  5. unable to open database file, Read-only file system — бот пишет файл туда, куда писать нельзя. Разбор.
  6. Conflict: terminated by other getUpdates request — тот же бот запущен где-то ещё. Разбор.
  7. Таймауты и Cannot connect to host api.telegram.org — проблема сети до Telegram, частая на серверах в России. Разбор.

Ошибки нет, а бот всё равно остановился

Если лог пустой или в нём только ваши print, вариантов немного:

Повторите падение у себя

Сервер отличается от вашего компьютера тремя вещами. Воспроизведите их — и ошибка появится локально:

python -m venv /tmp/check && source /tmp/check/bin/activate
pip install -r requirements.txt     # только то, что в файле
export BOT_TOKEN=123456:ABC...      # те же переменные, что на сервере
python bot.py                       # из корня репозитория, как на сервере

Чистое окружение ловит забытые библиотеки, явные переменные — забытый .env (он обычно не попадает в git), запуск из корня — неправильные относительные пути.

Или пусть разберёт за вас

Вставьте лог в нашу бесплатную проверку ошибок бота: она узнаёт частые ошибки и говорит, что исправить. А если бот работает на botdepo, то же самое показывается само — рядом с логом упавшего деплоя, и падение после запуска приходит уведомлением в Telegram. Задеплоить бота.

Частые вопросы

Локально работает, на сервере нет. Почему?

В 9 случаях из 10 — библиотека, которой нет в requirements.txt, или переменная из .env, которой нет на сервере. Проверка в чистом окружении выше ловит обе.

Бот упал через несколько часов, а не сразу. Это то же самое?

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