Some checks reported errors
continuous-integration/drone/push Build encountered an error
4.5 KiB
4.5 KiB
🤖 Управление ботом
Проблема множественных экземпляров
Если бот перестал реагировать на команды и в логах появляются ошибки:
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
Что делает скрипт?
-
bot-start:
- Проверяет, не запущен ли уже бот
- Останавливает все старые процессы
python main.py - Запускает ТОЛЬКО ОДИН экземпляр бота
- Создает PID-файл для отслеживания процесса
-
bot-stop:
- Корректно останавливает бот (SIGTERM, затем SIGKILL)
- Удаляет PID-файл
- Проверяет что все процессы остановлены
-
bot-restart:
- Останавливает бота
- Запускает заново
-
bot-status:
- Показывает состояние бота (работает/не работает)
- Показывает PID и использование ресурсов
- Проверяет логи на ошибки конфликта
- Предупреждает если найдено несколько процессов
-
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