✅ Регистрация и верификация жильцов ✅ Рейтинг активности (уровни) ✅ Детект шпионов (Score 0-100) ✅ Анти-мат система (3 предупреждения → бан) ✅ Админ-панель с рассылкой ✅ Учёт квартир (несколько жильцов) ✅ Телефоны экстренных служб и мастеров ✅ Еженедельный экспорт JSON ✅ Прокси (socks5) для обхода РКН Бекап: backups/versions/v1.0_mvp_2026-02-26/ Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
246 lines
6 KiB
Markdown
246 lines
6 KiB
Markdown
# 🚦 Управление ботом — полная инструкция
|
||
|
||
## 📋 Скрипты управления
|
||
|
||
В папке `/home/matrixhasyou/domovoy_bot/` есть 3 скрипта:
|
||
|
||
| Скрипт | Описание |
|
||
|--------|----------|
|
||
| `./run.sh` | **Умный запуск** — проверяет на дубликаты, спрашивает что делать |
|
||
| `./start.sh` | **Жёсткий запуск** — убивает старый процесс, запускает новый |
|
||
| `./stop.sh` | **Остановка** — корректно останавливает бота |
|
||
|
||
---
|
||
|
||
## 🎯 В чём была проблема?
|
||
|
||
### Сценарий "Как ты создал двух ботов":
|
||
|
||
1. Ты запустил `./run.sh` → бот запустился (PID 1)
|
||
2. Ты **не закрыл терминал**, открыл новое окно
|
||
3. Запустил `./run.sh` снова → создался **второй процесс** (PID 2)
|
||
4. Telegram получал запросы от **двух ботов одновременно**
|
||
5. Ошибка: `Conflict: terminated by other getUpdates request`
|
||
|
||
### Почему так произошло?
|
||
|
||
**`run.sh` запускал бота в foreground** (на переднем плане):
|
||
```bash
|
||
python main.py # Работает пока терминал открыт
|
||
```
|
||
|
||
Если открыть **второй терминал** и запустить снова — создаётся второй процесс!
|
||
|
||
---
|
||
|
||
## ✅ Как теперь (исправлено)
|
||
|
||
### `./run.sh` — умный запуск:
|
||
|
||
```bash
|
||
./run.sh
|
||
```
|
||
|
||
**Что делает:**
|
||
1. Проверяет — запущен ли бот
|
||
2. Если запущен — **спрашивает**: остановить или выйти
|
||
3. Запускает в **фоне** (nohup)
|
||
4. Показывает PID и логи
|
||
|
||
**Пример:**
|
||
```
|
||
⚠️ Бот уже запущен (PID: 12345)!
|
||
|
||
Выберите действие:
|
||
1) Остановить и перезапустить бота
|
||
2) Выйти (бот продолжит работать)
|
||
|
||
Ваш выбор (1/2):
|
||
```
|
||
|
||
---
|
||
|
||
### `./start.sh` — жёсткий запуск:
|
||
|
||
```bash
|
||
./start.sh
|
||
```
|
||
|
||
**Что делает:**
|
||
1. **Убивает все процессы бота** (pkill -9)
|
||
2. Запускает заново в фоне
|
||
3. Показывает логи
|
||
|
||
**Используй когда:**
|
||
- Бот "заглючил"
|
||
- Не знаешь сколько процессов запущено
|
||
- Хочешь просто перезапустить
|
||
|
||
---
|
||
|
||
### `./stop.sh` — остановка:
|
||
|
||
```bash
|
||
./stop.sh
|
||
```
|
||
|
||
**Что делает:**
|
||
1. Находит все процессы бота
|
||
2. Корректно останавливает
|
||
3. Если не получается — убивает силой
|
||
|
||
---
|
||
|
||
## 🧪 Проверка статуса
|
||
|
||
### Узнать запущен ли бот:
|
||
```bash
|
||
pgrep -f "python.*main.py"
|
||
```
|
||
|
||
Если вернёт число (PID) — бот работает.
|
||
|
||
### Посмотреть логи:
|
||
```bash
|
||
cd /home/matrixhasyou/domovoy_bot
|
||
tail -f logs/bot.log
|
||
```
|
||
|
||
### Посмотреть все процессы:
|
||
```bash
|
||
ps aux | grep "python.*main" | grep -v grep
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 Типовые сценарии
|
||
|
||
### 1️⃣ Первый запуск:
|
||
```bash
|
||
cd /home/matrixhasyou/domovoy_bot
|
||
./run.sh
|
||
```
|
||
|
||
### 2️⃣ Перезапуск после изменений:
|
||
```bash
|
||
./start.sh
|
||
```
|
||
|
||
### 3️⃣ Остановка:
|
||
```bash
|
||
./stop.sh
|
||
```
|
||
|
||
### 4️⃣ Проверка работы:
|
||
```bash
|
||
tail -f logs/bot.log
|
||
```
|
||
|
||
---
|
||
|
||
## 🐛 Если что-то пошло не так
|
||
|
||
### "Бот не отвечает"
|
||
|
||
1. Проверь процессы:
|
||
```bash
|
||
pgrep -f "python.*main.py"
|
||
```
|
||
|
||
2. Если пусто — бот не запущен:
|
||
```bash
|
||
./run.sh
|
||
```
|
||
|
||
3. Если есть PID — смотри логи:
|
||
```bash
|
||
tail -f logs/bot.log
|
||
```
|
||
|
||
### "Ошибка Conflict: terminated by other getUpdates"
|
||
|
||
**Значит:** Запущено **два или больше процессов** бота.
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Остановить всё
|
||
./stop.sh
|
||
|
||
# Запустить заново
|
||
./start.sh
|
||
```
|
||
|
||
### "Бот завис"
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Убить силой
|
||
pkill -9 -f "python.*main.py"
|
||
|
||
# Запустить
|
||
./start.sh
|
||
```
|
||
|
||
---
|
||
|
||
## 💡 Почему теперь два бота не запустятся?
|
||
|
||
### В `run.sh`:
|
||
```bash
|
||
EXISTING_PID=$(pgrep -f "python.*main.py")
|
||
|
||
if [ -n "$EXISTING_PID" ]; then
|
||
# Бот уже запущен!
|
||
# Спрашиваем что делать
|
||
fi
|
||
```
|
||
|
||
### В `start.sh`:
|
||
```bash
|
||
# Убиваем ВСЕ процессы перед запуском
|
||
pkill -9 -f "python.*main.py"
|
||
```
|
||
|
||
### Запуск в фоне:
|
||
```bash
|
||
nohup python main.py >> logs/bot.log 2>&1 &
|
||
```
|
||
|
||
**`nohup`** — работает даже после закрытия терминала
|
||
**`&`** — запускает в фоне
|
||
**`>> logs/bot.log`** — пишет логи в файл
|
||
|
||
---
|
||
|
||
## 📚 Команды для управления
|
||
|
||
| Команда | Что делает |
|
||
|---------|------------|
|
||
| `./run.sh` | Умный запуск (спрашивает) |
|
||
| `./start.sh` | Жёсткий запуск (убивает старый) |
|
||
| `./stop.sh` | Остановка |
|
||
| `pgrep -f "python.*main.py"` | Проверка запущен ли |
|
||
| `tail -f logs/bot.log` | Смотреть логи |
|
||
| `pkill -f "python.*main.py"` | Остановить вручную |
|
||
| `pkill -9 -f "python.*main.py"` | Убить силой |
|
||
|
||
---
|
||
|
||
## ✅ Золотое правило
|
||
|
||
**Всегда используй скрипты!**
|
||
|
||
❌ **НЕ запускай напрямую:**
|
||
```bash
|
||
python main.py # Плохо!
|
||
```
|
||
|
||
✅ **Используй скрипты:**
|
||
```bash
|
||
./run.sh # Хорошо!
|
||
./start.sh # Тоже хорошо!
|
||
```
|
||
|
||
---
|
||
|
||
**Теперь два бота никогда не запустятся одновременно!** 🎉
|