Files
ai-server/scripts/status.sh
2025-09-22 15:31:51 +05:00

202 lines
7.3 KiB
Bash
Raw 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
# AI Server Status Script for Ubuntu
# RTX 2060 Optimized
# Colors
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m'
echo -e "${BLUE}📊 AI Server Status Report${NC}"
echo "========================================"
# System Information
echo -e "${PURPLE}🖥️ Система:${NC}"
echo " Хост: $(hostname)"
echo " IP: $(hostname -I | awk '{print $1}')"
echo " Время работы: $(uptime -p)"
echo " Дата: $(date '+%Y-%m-%d %H:%M:%S')"
# GPU Status
echo ""
echo -e "${PURPLE}🎮 GPU (RTX 2060):${NC}"
if command -v nvidia-smi &> /dev/null; then
# GPU basic info
GPU_INFO=$(nvidia-smi --query-gpu=name,driver_version,memory.used,memory.total,utilization.gpu,temperature.gpu --format=csv,noheader,nounits)
if [[ -n "$GPU_INFO" ]]; then
echo "$GPU_INFO" | while IFS=', ' read -r name driver mem_used mem_total util temp; do
echo " ✅ Модель: $name"
echo " 📦 Драйвер: $driver"
echo " 🧠 VRAM: ${mem_used}MB / ${mem_total}MB ($(( (mem_used * 100) / mem_total ))%)"
echo " ⚡ Загрузка: ${util}%"
echo " 🌡️ Температура: ${temp}°C"
# Warning thresholds
if (( temp > 80 )); then
echo -e " ${RED}⚠️ ВНИМАНИЕ: Высокая температура GPU!${NC}"
fi
if (( util > 90 )); then
echo -e " ${YELLOW}⚠️ GPU сильно загружен${NC}"
fi
done
else
echo -e " ${RED}Не удается получить информацию о GPU${NC}"
fi
else
echo -e " ${RED}❌ NVIDIA драйверы не установлены${NC}"
fi
# Docker Status
echo ""
echo -e "${PURPLE}🐳 Docker:${NC}"
if command -v docker &> /dev/null; then
if docker info >/dev/null 2>&1; then
echo -e " ✅ Docker запущен"
echo " 📦 Версия: $(docker --version | cut -d' ' -f3 | tr -d ',')"
# Check NVIDIA Docker support
if docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi >/dev/null 2>&1; then
echo -e " ✅ NVIDIA GPU поддержка включена"
else
echo -e " ${YELLOW}⚠️ NVIDIA GPU поддержка не настроена${NC}"
fi
else
echo -e " ${RED}❌ Docker не запущен${NC}"
fi
else
echo -e " ${RED}❌ Docker не установлен${NC}"
fi
# Ollama Status
echo ""
echo -e "${PURPLE}🤖 Ollama:${NC}"
if systemctl is-active --quiet ollama; then
echo -e " ✅ Сервис запущен"
echo " 📍 Адрес: http://localhost:11434"
# Test connection
if curl -s http://localhost:11434 >/dev/null 2>&1; then
echo -e " ✅ API доступен"
# List models
echo " 📦 Установленные модели:"
sudo -u aiserver OLLAMA_HOME=/opt/ai-server/.ollama ollama list 2>/dev/null | tail -n +2 | while read -r line; do
if [[ -n "$line" ]]; then
model_name=$(echo "$line" | awk '{print $1}')
model_size=$(echo "$line" | awk '{print $2}')
echo "$model_name ($model_size)"
fi
done
else
echo -e " ${RED}❌ API недоступен${NC}"
fi
# Service logs (last 3 lines)
echo " 📋 Последние логи:"
sudo journalctl -u ollama --no-pager -n 3 | tail -n +4 | sed 's/^/ /'
else
echo -e " ${RED}❌ Сервис остановлен${NC}"
fi
# Web UI Status
echo ""
echo -e "${PURPLE}🌐 Веб-интерфейс:${NC}"
cd /opt/ai-server 2>/dev/null || {
echo -e " ${RED}❌ Рабочая директория не найдена${NC}"
exit 1
}
if docker compose ps 2>/dev/null | grep -q "running"; then
echo -e " ✅ Контейнеры запущены"
echo " 📍 Адрес: http://$(hostname -I | awk '{print $1}'):3000"
# Container details
echo " 📦 Статус контейнеров:"
docker compose ps --format "table {{.Service}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | tail -n +2 | while read -r line; do
if [[ -n "$line" ]]; then
echo " $line"
fi
done
# Resource usage
echo " 💻 Использование ресурсов:"
docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" 2>/dev/null | \
grep "ai-server" | while read -r line; do
echo " $line"
done
else
echo -e " ${RED}❌ Контейнеры не запущены${NC}"
fi
# System Resources
echo ""
echo -e "${PURPLE}💾 Системные ресурсы:${NC}"
# CPU
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
echo " 🧮 CPU: ${CPU_USAGE}%"
# Memory
MEM_INFO=$(free -h | grep "Mem:")
MEM_TOTAL=$(echo $MEM_INFO | awk '{print $2}')
MEM_USED=$(echo $MEM_INFO | awk '{print $3}')
MEM_PERCENT=$(free | grep Mem | awk '{printf("%.1f", ($3/$2) * 100.0)}')
echo " 🧠 RAM: ${MEM_USED}/${MEM_TOTAL} (${MEM_PERCENT}%)"
# Disk
DISK_INFO=$(df -h /opt/ai-server 2>/dev/null | tail -1)
if [[ -n "$DISK_INFO" ]]; then
DISK_USED=$(echo $DISK_INFO | awk '{print $3}')
DISK_TOTAL=$(echo $DISK_INFO | awk '{print $2}')
DISK_PERCENT=$(echo $DISK_INFO | awk '{print $5}')
echo " 💽 Диск: ${DISK_USED}/${DISK_TOTAL} (${DISK_PERCENT})"
fi
# Network
echo " 🌐 Сетевые порты:"
netstat -tln 2>/dev/null | grep -E ":3000|:11434|:9000" | while read -r line; do
port=$(echo $line | awk '{print $4}' | cut -d':' -f2)
case $port in
3000) echo " ✅ 3000 (Web UI) - активен" ;;
11434) echo " ✅ 11434 (Ollama) - активен" ;;
9000) echo " ✅ 9000 (Portainer) - активен" ;;
esac
done
# Recommendations
echo ""
echo -e "${CYAN}💡 Рекомендации для RTX 2060:${NC}"
# Check GPU memory usage
if command -v nvidia-smi &> /dev/null; then
GPU_MEM_USED=$(nvidia-smi --query-gpu=memory.used --format=csv,noheader,nounits)
if (( GPU_MEM_USED > 5000 )); then
echo -e " ${YELLOW}⚠️ VRAM почти заполнена. Рассмотрите использование меньших моделей${NC}"
echo " • llama3.2:1b (1.3GB) - быстрая модель"
echo " • llama3.2:3b (2GB) - оптимальная для RTX 2060"
elif (( GPU_MEM_USED < 1000 )); then
echo -e " ${GREEN}✅ VRAM свободна. Можно использовать более крупные модели${NC}"
echo " • codellama:7b (3.8GB) - для программирования"
echo " • mistral:7b (4.1GB) - универсальная модель"
fi
fi
echo ""
echo "========================================"
echo -e "${GREEN}📋 Команды управления:${NC}"
echo " ai-start - запуск сервера"
echo " ai-stop - остановка сервера"
echo " ai-logs - просмотр логов"
echo " ai-models - управление моделями"
# Show last update time
echo ""
echo -e "${CYAN}Обновлено: $(date '+%H:%M:%S')${NC}"