Files
new_lottery_bot/BOT_MANAGEMENT.md
Andrew K. Choi 72e95db811
Some checks reported errors
continuous-integration/drone/push Build encountered an error
feat: add bot control script to prevent multiple instances
- 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
2025-11-17 06:44:43 +09:00

4.5 KiB
Raw Permalink Blame History

🤖 Управление ботом

Проблема множественных экземпляров

Если бот перестал реагировать на команды и в логах появляются ошибки:

ERROR - TelegramConflictError: Conflict: terminated by other getUpdates request

Это означает, что запущено несколько экземпляров бота одновременно, и они конфликтуют друг с другом.

Решение

Используйте скрипт bot_control.sh для управления ботом:

Команды управления через Makefile

# Запустить бота (остановит все старые процессы)
make bot-start

# Остановить бота
make bot-stop

# Перезапустить бота
make bot-restart

# Проверить статус бота
make bot-status

# Показать логи бота в реальном времени
make bot-logs

Прямое использование скрипта

# Запуск
./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 - логи бота

Диагностика проблем

Проверить сколько процессов запущено:

ps aux | grep "python main.py" | grep -v grep

Должна быть только одна строка. Если больше - используйте make bot-restart.

Проверить логи на ошибки:

tail -n 100 /tmp/bot_single.log | grep "ERROR"

Остановить ВСЕ процессы бота вручную:

pkill -9 -f "python main.py"

Затем запустите через make bot-start.

⚠️ Важно

  • НЕ используйте make run для продакшена - он не контролирует множественные запуски
  • ВСЕГДА используйте make bot-start или ./bot_control.sh start
  • Перед запуском нового экземпляра всегда проверяйте статус: make bot-status

Автозапуск при загрузке системы (опционально)

Если нужно автоматически запускать бота при загрузке сервера:

# Создать systemd service
sudo nano /etc/systemd/system/lottery-bot.service

Содержимое файла:

[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

Активация:

sudo systemctl daemon-reload
sudo systemctl enable lottery-bot
sudo systemctl start lottery-bot
sudo systemctl status lottery-bot