test server
This commit is contained in:
202
scripts/status.sh
Normal file
202
scripts/status.sh
Normal file
@@ -0,0 +1,202 @@
|
||||
#!/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 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}"
|
||||
Reference in New Issue
Block a user