# 🚦 Управление ботом — полная инструкция ## 📋 Скрипты управления В папке `/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 # Тоже хорошо! ``` --- **Теперь два бота никогда не запустятся одновременно!** 🎉