Files
new_lottery_bot/bot_control.sh
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

126 lines
4.4 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Скрипт для управления ботом (запуск/остановка/перезапуск)
BOT_DIR="/home/trevor/new_lottery_bot"
LOG_FILE="/tmp/bot_single.log"
PID_FILE="$BOT_DIR/.bot.pid"
case "$1" in
start)
echo "🚀 Запуск бота..."
cd "$BOT_DIR"
# Проверяем не запущен ли уже
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
echo "⚠️ Бот уже запущен (PID: $PID)"
exit 1
fi
fi
# Останавливаем все старые процессы
pkill -9 -f "python main.py" 2>/dev/null
sleep 2
# Запускаем бота
. .venv/bin/activate
nohup python main.py > "$LOG_FILE" 2>&1 &
NEW_PID=$!
echo $NEW_PID > "$PID_FILE"
sleep 3
if ps -p $NEW_PID > /dev/null; then
echo "✅ Бот запущен (PID: $NEW_PID)"
echo "📋 Логи: tail -f $LOG_FILE"
else
echo "❌ Не удалось запустить бота"
rm -f "$PID_FILE"
exit 1
fi
;;
stop)
echo "🛑 Остановка бота..."
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
kill -15 "$PID"
sleep 2
if ps -p "$PID" > /dev/null 2>&1; then
kill -9 "$PID"
fi
echo "✅ Бот остановлен"
else
echo "⚠️ Процесс не найден"
fi
rm -f "$PID_FILE"
else
# Останавливаем все процессы python main.py на всякий случай
pkill -9 -f "python main.py" 2>/dev/null
echo "✅ Все процессы остановлены"
fi
;;
restart)
echo "🔄 Перезапуск бота..."
$0 stop
sleep 2
$0 start
;;
status)
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
echo "✅ Бот работает (PID: $PID)"
echo "📊 Статистика процесса:"
ps aux | grep "$PID" | grep -v grep
# Проверяем последние ошибки
if grep -q "ERROR.*Conflict" "$LOG_FILE" 2>/dev/null; then
echo "⚠️ В логах обнаружены ошибки конфликта!"
echo "Последние ошибки:"
tail -n 100 "$LOG_FILE" | grep "ERROR.*Conflict" | tail -3
else
echo "✅ Ошибок конфликта не обнаружено"
fi
else
echo "❌ Бот не работает (PID файл существует, но процесс не найден)"
rm -f "$PID_FILE"
fi
else
# Проверяем запущенные процессы
COUNT=$(ps aux | grep "python main.py" | grep -v grep | wc -l)
if [ "$COUNT" -gt 0 ]; then
echo "⚠️ Найдено $COUNT процессов бота (без PID файла)"
ps aux | grep "python main.py" | grep -v grep
else
echo "❌ Бот не запущен"
fi
fi
;;
logs)
if [ -f "$LOG_FILE" ]; then
tail -f "$LOG_FILE"
else
echo "❌ Файл логов не найден: $LOG_FILE"
fi
;;
*)
echo "Использование: $0 {start|stop|restart|status|logs}"
echo ""
echo "Команды:"
echo " start - Запустить бота"
echo " stop - Остановить бота"
echo " restart - Перезапустить бота"
echo " status - Проверить статус бота"
echo " logs - Показать логи бота (Ctrl+C для выхода)"
exit 1
;;
esac
exit 0