Some checks reported errors
continuous-integration/drone/push Build encountered an error
- Add bot_control.sh script for safe bot management - Prevent 'Conflict: terminated by other getUpdates' error - Add Makefile commands: bot-start, bot-stop, bot-restart, bot-status, bot-logs - Add BOT_MANAGEMENT.md with usage instructions - Use PID file to track single bot instance - Auto-stop all old processes before starting - Add .bot.pid to .gitignore Fixes issue where multiple bot instances cause command processing failures
152 lines
4.5 KiB
Markdown
152 lines
4.5 KiB
Markdown
# 🤖 Управление ботом
|
||
|
||
## Проблема множественных экземпляров
|
||
|
||
Если бот перестал реагировать на команды и в логах появляются ошибки:
|
||
```
|
||
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
|
||
```
|