The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Одна копия telegram bot на python, !*! hebeseyir, 25-Сен-19, 14:52  [смотреть все]
Подскажите средство для того чтобы всегда была запущена только одна копия python скрипта на разных серверах, которая запускает бота
Иначе, если запущено 2 бота, то сообщения в чате дублируются
  • Одна копия telegram bot на python, !*! Аноним, 23:38 , 25-Сен-19 (1)
    Unix-way решение проблемы...
    Создаете отдельных пользователей на серверах, и раскидываете их SSH-ключи по серверам. Чтобы от этого пользователя на каждом сервере можно было подключиться на все остальные серваки.

    Перед тем, как стартануть бота, по SSH берете список процессов с каждого сервера. Если он там запущен, ничего не запускаете. Если запущенных процессов на других серверах нет, запускаете.

    • Одна копия telegram bot на python, !*! ABATAPA, 16:46 , 27-Сен-19 (2)
      > Unix-way решение проблемы...
      > Создаете отдельных пользователей на серверах, и раскидываете их SSH-ключи по серверам.
      > Чтобы от этого пользователя на каждом сервере можно было подключиться на
      > все остальные серваки.
      > Перед тем, как стартануть бота, по SSH берете список процессов с каждого
      > сервера. Если он там запущен, ничего не запускаете. Если запущенных процессов
      > на других серверах нет, запускаете.

      Это bad-way. Между проверкой и запуском процесс может быть запущен и на первой машине.
      Нужно вводить блокировку — например, через файл, который создаётся атомарной операцией (создание файла и эксклюзивная запись), писать в него PID и машину процесса, при старте проверять возможность  создания блокировки, жив ли процесс, и т. д.
      Существуют уже готовые средства кластеризации приложений (HA-кластеры).

      Кроме того, это можно сделать с помощью HA-кластера виртуализации (того же Proxmox).

      • Одна копия telegram bot на python, !*! Аноним, 12:49 , 28-Сен-19 (3)
        >[оверквотинг удален]
        >> сервера. Если он там запущен, ничего не запускаете. Если запущенных процессов
        >> на других серверах нет, запускаете.
        > Это bad-way. Между проверкой и запуском процесс может быть запущен и на
        > первой машине.
        > Нужно вводить блокировку — например, через файл, который создаётся атомарной операцией
        > (создание файла и эксклюзивная запись), писать в него PID и машину
        > процесса, при старте проверять возможность  создания блокировки, жив ли процесс,
        > и т. д.
        > Существуют уже готовые средства кластеризации приложений (HA-кластеры).
        > Кроме того, это можно сделать с помощью HA-кластера виртуализации (того же Proxmox).

        Вы переусложняете.
        Требования High Availability не было. Требования проверки здоровья процесса не было.

        Нам ничего не рассказали о логике запуска этой программы. Мой ответ покрывает базовую часть, как из того, что есть, сделать проверку, запущен ли экземпляр программы на другом сервере. Если появятся уточнения, я разовью идею дальше.

        Как вариант, роботу после входа писать в чат, что он вошёл в такое-то время. Все роботы, у которых вход до этого времени, должны немедленно выйти. Но это оффтопик для этого форума.

  • Одна копия telegram bot на python, !*! fantom, 15:33 , 16-Июл-20 (5)
    > Подскажите средство для того чтобы всегда была запущена только одна копия python
    > скрипта на разных серверах, которая запускает бота
    > Иначе, если запущено 2 бота, то сообщения в чате дублируются

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру