split servises

This commit is contained in:
2025-10-21 09:27:29 +00:00
parent d4d9964282
commit 92211a55f1
2 changed files with 131 additions and 68 deletions

192
setup.sh
View File

@@ -88,6 +88,40 @@ download_code() {
log_info "Текущая ветка: $(git branch --show-current)"
}
# Функция обновления requirements.txt
update_requirements() {
local target_dir="/root/RFB"
cd $target_dir
log_info "Обновление requirements.txt..."
# Создаем или обновляем requirements.txt
if [ ! -f "requirements.txt" ]; then
log_warn "requirements.txt не найден, создаем новый..."
cat > requirements.txt << EOF
streamlit>=1.28.0
requests>=2.31.0
pandas>=2.0.0
numpy>=1.24.0
plotly>=5.15.0
watchdog>=3.0.0
pillow>=10.0.0
streamlit_autorefresh>=0.1.7
EOF
else
# Проверяем, есть ли streamlit_autorefresh в requirements.txt
if ! grep -q "streamlit_autorefresh" requirements.txt; then
log_info "Добавляем streamlit_autorefresh в requirements.txt..."
echo "streamlit_autorefresh>=0.1.7" >> requirements.txt
else
log_info "streamlit_autorefresh уже есть в requirements.txt"
fi
fi
log_info "Содержимое requirements.txt:"
cat requirements.txt
}
# Функция настройки виртуального окружения
setup_venv() {
local target_dir="/root/RFB"
@@ -107,16 +141,22 @@ setup_venv() {
# Обновление pip
pip install --upgrade pip
# Обновляем requirements.txt перед установкой
update_requirements
if [ -f "requirements.txt" ]; then
log_info "Установка зависимостей из requirements.txt..."
pip install -r requirements.txt
else
log_warn "Файл requirements.txt не найден, устанавливаем базовые зависимости..."
pip install streamlit requests pandas numpy plotly
pip install streamlit requests pandas numpy plotly watchdog pillow streamlit_autorefresh
fi
# Установка дополнительных зависимостей которые могут понадобиться
pip install watchdog pillow streamlit_autorefresh
# Дополнительная проверка и установка streamlit_autorefresh на всякий случай
if ! python -c "import streamlit_autorefresh" 2>/dev/null; then
log_info "Устанавливаем streamlit_autorefresh..."
pip install streamlit_autorefresh
fi
# Проверка установки streamlit
if ! [ -f ".venv/bin/streamlit" ]; then
@@ -124,54 +164,74 @@ setup_venv() {
exit 1
fi
log_info "Проверка установленных пакетов:"
python -c "
import streamlit, requests, pandas, numpy, plotly, streamlit_autorefresh
print('✓ Все основные пакеты успешно импортируются')
"
log_info "Установленные пакеты:"
pip list --format=columns
pip list --format=columns | grep -E "(streamlit|requests|pandas|numpy|plotly|autorefresh)"
}
# Функция создания systemd сервиса
create_systemd_service() {
# Функция создания systemd сервисов
create_systemd_services() {
local team="$1"
local service_file="/etc/systemd/system/rfb-stat.service"
log_info "Создание systemd сервиса для команды: $team..."
log_info "Создание отдельных systemd сервисов..."
# Останавливаем сервис если он уже запущен
if systemctl is-active --quiet rfb-stat.service; then
log_info "Остановка работающего сервиса..."
systemctl stop rfb-stat.service
fi
# Останавливаем и отключаем старые сервисы если они есть
for service in rfb-data.service rfb-visual.service rfb-stat.service; do
if systemctl is-active --quiet $service; then
log_info "Остановка $service..."
systemctl stop $service
fi
if systemctl is-enabled --quiet $service; then
log_info "Отключение $service..."
systemctl disable $service
fi
done
# Отключаем сервис если он включен
if systemctl is-enabled --quiet rfb-stat.service; then
log_info "Отключение сервиса..."
systemctl disable rfb-stat.service
fi
# Сервис для data
local data_service_file="/etc/systemd/system/rfb-data.service"
# Создаем запускаемый скрипт для избежания проблем с кавычками
local startup_script="/root/RFB/start_rfb.sh"
cat > $startup_script << EOF
#!/bin/bash
cd /root/RFB
source /root/RFB/.venv/bin/activate
python3 get_data.py --team $team &
streamlit run visual.py --server.port 8501 --server.address 0.0.0.0
EOF
chmod +x $startup_script
cat > $service_file << EOF
cat > $data_service_file << EOF
[Unit]
Description=RFB Stat v.1.0
Description=RFB Data Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/RFB
ExecStart=$startup_script
Environment=PATH=/root/RFB/.venv/bin
ExecStart=/root/RFB/.venv/bin/python3 get_data.py --team $team
Restart=always
RestartSec=3
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
# Сервис для visual
local visual_service_file="/etc/systemd/system/rfb-visual.service"
cat > $visual_service_file << EOF
[Unit]
Description=RFB Visual Service
After=network.target
Wants=rfb-data.service
[Service]
Type=simple
User=root
WorkingDirectory=/root/RFB
Environment=PATH=/root/RFB/.venv/bin
ExecStart=/root/RFB/.venv/bin/streamlit run visual.py --server.port 8501 --server.address 0.0.0.0
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
@@ -180,13 +240,13 @@ WantedBy=multi-user.target
EOF
# Настройка прав
chmod 644 $service_file
chmod 644 $data_service_file $visual_service_file
log_info "Перезагрузка systemd демонов..."
systemctl daemon-reload
log_info "Включение сервиса..."
systemctl enable rfb-stat.service
log_info "Включение сервисов..."
systemctl enable rfb-data.service rfb-visual.service
}
# Функция проверки файлов
@@ -212,9 +272,6 @@ check_required_files() {
fi
log_info "Все необходимые файлы присутствуют"
# Проверка прав на выполнение
chmod +x visual.py get_data.py
}
# Функция определения IP и команды
@@ -299,27 +356,37 @@ check_port() {
return 0
}
# Функция управления сервисом
manage_service() {
# Функция управления сервисами
manage_services() {
local action="$1"
case $action in
"start")
log_info "Запуск сервиса..."
systemctl start rfb-stat.service
log_info "Запуск сервисов..."
systemctl start rfb-data.service rfb-visual.service
;;
"restart")
log_info "Перезапуск сервиса..."
systemctl restart rfb-stat.service
log_info "Перезапуск сервисов..."
systemctl restart rfb-data.service rfb-visual.service
;;
"stop")
log_info "Остановка сервиса..."
systemctl stop rfb-stat.service
log_info "Остановка сервисов..."
systemctl stop rfb-data.service rfb-visual.service
;;
esac
# Даем время сервису на запуск/остановку
sleep 2
# Даем время сервисам на запуск/остановку
sleep 3
}
# Функция проверки статуса сервисов
check_services_status() {
log_info "Статус сервисов:"
echo "=== RFB Data Service ==="
systemctl status rfb-data.service --no-pager
echo ""
echo "=== RFB Visual Service ==="
systemctl status rfb-visual.service --no-pager
}
# Основная функция
@@ -367,18 +434,16 @@ main() {
# Проверка порта
check_port
# Создание systemd сервиса
create_systemd_service "$final_team"
# Создание systemd сервисов
create_systemd_services "$final_team"
log_info "Настройка завершена!"
# Запуск сервиса
manage_service "start"
# Запуск сервисов
manage_services "start"
# Проверка статуса
sleep 3
log_info "Статус сервиса:"
systemctl status rfb-stat.service --no-pager
check_services_status
# Получаем IP еще раз для вывода
ip_address=$(ip a 2>/dev/null | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | head -n1)
@@ -389,9 +454,14 @@ main() {
log_info "Команда: $final_team"
log_info "Режим: $release"
log_info ""
log_info "Для просмотра логов: journalctl -u rfb-stat.service -f"
log_info "Для перезапуска: systemctl restart rfb-stat.service"
log_info "Для остановки: systemctl stop rfb-stat.service"
log_info "Для просмотра логов:"
log_info " Данные: journalctl -u rfb-data.service -f"
log_info " Визуал: journalctl -u rfb-visual.service -f"
log_info ""
log_info "Управление сервисами:"
log_info " Перезапуск всех: systemctl restart rfb-data.service rfb-visual.service"
log_info " Остановка всех: systemctl stop rfb-data.service rfb-visual.service"
log_info " Статус: systemctl status rfb-data.service rfb-visual.service"
log_info "=================================================="
}

View File

@@ -1,7 +0,0 @@
#!/bin/bash
cd /root/RFB
source /root/RFB/.venv/bin/activate
python3 get_data.py --team [INFO] Определен IP адрес: 10.10.35.29
[INFO] Используется автоопределенная команда: Pari_Nizhny_Novgorod
Pari_Nizhny_Novgorod &
streamlit run visual.py --server.port 8501 --server.address 0.0.0.0