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
126 lines
4.4 KiB
Bash
Executable File
126 lines
4.4 KiB
Bash
Executable File
#!/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
|