Подскажите средство для того чтобы всегда была запущена только одна копия python скрипта на разных серверах, которая запускает бота
Иначе, если запущено 2 бота, то сообщения в чате дублируются
Unix-way решение проблемы...
Создаете отдельных пользователей на серверах, и раскидываете их SSH-ключи по серверам. Чтобы от этого пользователя на каждом сервере можно было подключиться на все остальные серваки.Перед тем, как стартануть бота, по SSH берете список процессов с каждого сервера. Если он там запущен, ничего не запускаете. Если запущенных процессов на других серверах нет, запускаете.
> Unix-way решение проблемы...
> Создаете отдельных пользователей на серверах, и раскидываете их SSH-ключи по серверам.
> Чтобы от этого пользователя на каждом сервере можно было подключиться на
> все остальные серваки.
> Перед тем, как стартануть бота, по SSH берете список процессов с каждого
> сервера. Если он там запущен, ничего не запускаете. Если запущенных процессов
> на других серверах нет, запускаете.Это bad-way. Между проверкой и запуском процесс может быть запущен и на первой машине.
Нужно вводить блокировку — например, через файл, который создаётся атомарной операцией (создание файла и эксклюзивная запись), писать в него PID и машину процесса, при старте проверять возможность создания блокировки, жив ли процесс, и т. д.
Существуют уже готовые средства кластеризации приложений (HA-кластеры).Кроме того, это можно сделать с помощью HA-кластера виртуализации (того же Proxmox).
>[оверквотинг удален]
>> сервера. Если он там запущен, ничего не запускаете. Если запущенных процессов
>> на других серверах нет, запускаете.
> Это bad-way. Между проверкой и запуском процесс может быть запущен и на
> первой машине.
> Нужно вводить блокировку — например, через файл, который создаётся атомарной операцией
> (создание файла и эксклюзивная запись), писать в него PID и машину
> процесса, при старте проверять возможность создания блокировки, жив ли процесс,
> и т. д.
> Существуют уже готовые средства кластеризации приложений (HA-кластеры).
> Кроме того, это можно сделать с помощью HA-кластера виртуализации (того же Proxmox).Вы переусложняете.
Требования High Availability не было. Требования проверки здоровья процесса не было.Нам ничего не рассказали о логике запуска этой программы. Мой ответ покрывает базовую часть, как из того, что есть, сделать проверку, запущен ли экземпляр программы на другом сервере. Если появятся уточнения, я разовью идею дальше.
Как вариант, роботу после входа писать в чат, что он вошёл в такое-то время. Все роботы, у которых вход до этого времени, должны немедленно выйти. Но это оффтопик для этого форума.
> Подскажите средство для того чтобы всегда была запущена только одна копия python
> скрипта на разных серверах, которая запускает бота
> Иначе, если запущено 2 бота, то сообщения в чате дублируютсяПеределать скрипт, скорее всего достигнут "порог некомпетентности" скрипта.
Если данные дублируются, вероятнее всего источник данных для скриптов на разных серверах один и тот же, достаточно добавить механизм проверки отослано или нет сообщение и количество скриптов перестанет быть проблемой.