# 🤖 Управление ботом ## Проблема множественных экземпляров Если бот перестал реагировать на команды и в логах появляются ошибки: ``` ERROR - TelegramConflictError: Conflict: terminated by other getUpdates request ``` Это означает, что запущено **несколько экземпляров бота одновременно**, и они конфликтуют друг с другом. ## Решение Используйте скрипт `bot_control.sh` для управления ботом: ### Команды управления через Makefile ```bash # Запустить бота (остановит все старые процессы) make bot-start # Остановить бота make bot-stop # Перезапустить бота make bot-restart # Проверить статус бота make bot-status # Показать логи бота в реальном времени make bot-logs ``` ### Прямое использование скрипта ```bash # Запуск ./bot_control.sh start # Остановка ./bot_control.sh stop # Перезапуск ./bot_control.sh restart # Статус ./bot_control.sh status # Логи ./bot_control.sh logs ``` ## Что делает скрипт? 1. **bot-start**: - Проверяет, не запущен ли уже бот - Останавливает все старые процессы `python main.py` - Запускает ТОЛЬКО ОДИН экземпляр бота - Создает PID-файл для отслеживания процесса 2. **bot-stop**: - Корректно останавливает бот (SIGTERM, затем SIGKILL) - Удаляет PID-файл - Проверяет что все процессы остановлены 3. **bot-restart**: - Останавливает бота - Запускает заново 4. **bot-status**: - Показывает состояние бота (работает/не работает) - Показывает PID и использование ресурсов - Проверяет логи на ошибки конфликта - Предупреждает если найдено несколько процессов 5. **bot-logs**: - Показывает логи бота в реальном времени - Нажмите Ctrl+C для выхода ## Файлы - **bot_control.sh** - скрипт управления ботом - **.bot.pid** - файл с PID текущего процесса бота - **/tmp/bot_single.log** - логи бота ## Диагностика проблем ### Проверить сколько процессов запущено: ```bash ps aux | grep "python main.py" | grep -v grep ``` Должна быть **только одна строка**. Если больше - используйте `make bot-restart`. ### Проверить логи на ошибки: ```bash tail -n 100 /tmp/bot_single.log | grep "ERROR" ``` ### Остановить ВСЕ процессы бота вручную: ```bash pkill -9 -f "python main.py" ``` Затем запустите через `make bot-start`. ## ⚠️ Важно - **НЕ используйте** `make run` для продакшена - он не контролирует множественные запуски - **ВСЕГДА используйте** `make bot-start` или `./bot_control.sh start` - Перед запуском нового экземпляра **всегда проверяйте** статус: `make bot-status` ## Автозапуск при загрузке системы (опционально) Если нужно автоматически запускать бота при загрузке сервера: ```bash # Создать systemd service sudo nano /etc/systemd/system/lottery-bot.service ``` Содержимое файла: ```ini [Unit] Description=Lottery Bot After=network.target postgresql.service [Service] Type=simple User=trevor WorkingDirectory=/home/trevor/new_lottery_bot ExecStart=/home/trevor/new_lottery_bot/bot_control.sh start ExecStop=/home/trevor/new_lottery_bot/bot_control.sh stop Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target ``` Активация: ```bash sudo systemctl daemon-reload sudo systemctl enable lottery-bot sudo systemctl start lottery-bot sudo systemctl status lottery-bot ```