Телеграм бот сам выключается, выходит из строя linux сервер ubuntu. Telebot

Начнем с того что после запуска .service файла на облачном linux сервере, с установленной операционной системой ubuntu бот прекрасно работает, день, два, рекорд неделю работал. Но как то случается то что бот сам по себе выключается, перестает отвечать на сообщения и прочее. Лечится это перезагрузкой. Я должен запустить бота на своем пк, подождать пока он ответит на все накопившиеся сообщения и только тогда он запускается на сервере. Я так полагаю, что для того что бы он вновь перезапустился нужно выполнить подключение к апи телеграм с другого устройства.

Что я пробовал для решения этой задачи. В начале, я подумал что поможет цикл while, который при ошибке выведет мне ошибку и заново перезапустит бота, но это вызывало ошибку с кодом python 'source':

    if __name__ == '__main__':
        while True:
            try:
                bot.polling(none_stop=True)
            except Exception as e:
                file_name = 'error_log.txt'
                with open(file_name, 'a') as file:
                    file.write(f'{str(e)}\n')
                    file.write(traceback.format_exc())
                time.sleep(30)
                print(e)

далее я прибегнул к ограничению запросов к апи телеграм,

    def limit_calls(func):
        def wrapper(message):
            chat_id = message.chat.id
            current_time = time.time()

            if chat_id not in call_count:
                call_count[chat_id] = 0

            if chat_id not in last_call_time or current_time - last_call_time[chat_id] >= 1:
            call_count[chat_id] = 0
            last_call_time[chat_id] = current_time

            if call_count[chat_id] >= 5:
                time.sleep(1)
                func(message)
            else:
                call_count[chat_id] += 1
                func(message)
        return wrapper
    @bot.message_handler(content_types=["text"])
    @limit_calls
    def commands(message):
        pass

Но тут опять получил ошибку. Я облазил весь интернет, обратился к друзьям, к чат gpt . Но ничего не нашел.Что делать? Как заставить бота работать бесперебойно? Можете дать решение данной проблемы или советы для того что бы я переписал код.

Примечание код очень большой на 400 строк, сюда прикреплять не вижу смысла, выделил только основные части, они ниже

Весть код.

import telebot
import time
from telebot import apihelper

bot = telebot.TeleBot(TOKEN)

call_count = {}
last_call_time = {}

def limit_calls(func):
    def wrapper(message):
        chat_id = message.chat.id
        current_time = time.time()

        if chat_id not in call_count:
            call_count[chat_id] = 0

        if chat_id not in last_call_time or current_time - last_call_time[chat_id] >= 1:
            call_count[chat_id] = 0
            last_call_time[chat_id] = current_time

        if call_count[chat_id] >= 5:
            time.sleep(1)
            func(message)
        else:
            call_count[chat_id] += 1
            func(message)
    return wrapper


@bot.message_handler(content_types=["text"])
@limit_calls
def commands(message):
    pass                                             
    **#Тут содержится вызов всех функций, но я посчитал не нужным их вставлять сюда.**


if __name__ == '__main__':
    while True:
        try:
            bot.polling(none_stop=True)
        except Exception as e:
            file_name = 'error_log.txt'
            with open(file_name, 'a') as file:
                file.write(f'{str(e)}\n')
                file.write(traceback.format_exc())
            time.sleep(30)
            print(e)

Текст ошибок прикреплю ниже.

HTTPSConnectionPool(host='api.telegram.org', port=443): Read timed out. (read timeout=25)
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 416, in _make_request
    httplib_response = conn.getresponse()
  File "/usr/lib/python3.8/http/client.py", line 1348, in getresponse
    response.begin()
  File "/usr/lib/python3.8/http/client.py", line 316, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python3.8/http/client.py", line 277, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "/usr/lib/python3.8/socket.py", line 669, in readinto
    return self._sock.recv_into(b)
  File "/usr/lib/python3.8/ssl.py", line 1270, in recv_into
    return self.read(nbytes, buffer)
  File "/usr/lib/python3.8/ssl.py", line 1128, in read
    return self._sslobj.read(len, buffer)
socket.timeout: The read operation timed out

During handling of the above exception, another exception occurred:




Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 719, in urlopen
    retries = retries.increment(
  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 400, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "/usr/lib/python3/dist-packages/six.py", line 703, in reraise
    raise value
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 665, in urlopen
    httplib_response = self._make_request(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 423, in _make_request
    self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 330, in _raise_timeout
    raise ReadTimeoutError(
urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='api.telegram.org', port=443): Read timed out. (read timeout=25)

During handling of the above exception, another exception occurred:




Traceback (most recent call last):
  File "main.py", line 381, in <module>
    bot.polling(none_stop=True)
  File "/usr/local/lib/python3.8/dist-packages/telebot/__init__.py", line 1104, in polling
    self.__threaded_polling(non_stop=non_stop, interval=interval, timeout=timeout, long_polling_timeout=long_polling_timeout,
  File "/usr/local/lib/python3.8/dist-packages/telebot/__init__.py", line 1179, in __threaded_polling
    raise e
  File "/usr/local/lib/python3.8/dist-packages/telebot/__init__.py", line 1140, in __threaded_polling
    polling_thread.raise_exceptions()
  File "/usr/local/lib/python3.8/dist-packages/telebot/util.py", line 110, in raise_exceptions
    raise self.exception_info
  File "/usr/local/lib/python3.8/dist-packages/telebot/util.py", line 92, in run
    task(*args, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/telebot/__init__.py", line 661, in __retrieve_updates
    updates = self.get_updates(offset=(self.last_update_id + 1),
  File "/usr/local/lib/python3.8/dist-packages/telebot/__init__.py", line 633, in get_updates
    json_updates = apihelper.get_updates(
  File "/usr/local/lib/python3.8/dist-packages/telebot/apihelper.py", line 321, in get_updates
    return _make_request(token, method_url, params=payload)
  File "/usr/local/lib/python3.8/dist-packages/telebot/apihelper.py", line 158, in _make_request
    result = _get_req_session().request(
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 529, in send
    raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='api.telegram.org', port=443): Read timed out. (read timeout=25)
'source'



Traceback (most recent call last):
  File "main.py", line 381, in <module>
    bot.polling(none_stop=True)
  File "/usr/local/lib/python3.8/dist-packages/telebot/__init__.py", line 1104, in polling
    self.__threaded_polling(non_stop=non_stop, interval=interval, timeout=timeout, long_polling_timeout=long_polling_timeout,
  File "/usr/local/lib/python3.8/dist-packages/telebot/__init__.py", line 1179, in __threaded_polling
    raise e
  File "/usr/local/lib/python3.8/dist-packages/telebot/__init__.py", line 1140, in __threaded_polling
    polling_thread.raise_exceptions()
  File "/usr/local/lib/python3.8/dist-packages/telebot/util.py", line 110, in raise_exceptions
    raise self.exception_info
  File "/usr/local/lib/python3.8/dist-packages/telebot/util.py", line 92, in run
    task(*args, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/telebot/__init__.py", line 661, in __retrieve_updates
    updates = self.get_updates(offset=(self.last_update_id + 1),
  File "/usr/local/lib/python3.8/dist-packages/telebot/__init__.py", line 636, in get_updates
    return [types.Update.de_json(ju) for ju in json_updates]
  File "/usr/local/lib/python3.8/dist-packages/telebot/__init__.py", line 636, in <listcomp>
    return [types.Update.de_json(ju) for ju in json_updates]
  File "/usr/local/lib/python3.8/dist-packages/telebot/types.py", line 207, in de_json
    chat_boost = ChatBoost.de_json(obj.get('chat_boost'))
  File "/usr/local/lib/python3.8/dist-packages/telebot/types.py", line 9152, in de_json
    obj['source'] = ChatBoostSource.de_json(obj['source'])
KeyError: 'source'
'source'

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