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

188
setup.sh
View File

@@ -88,6 +88,40 @@ download_code() {
log_info "Текущая ветка: $(git branch --show-current)" 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() { setup_venv() {
local target_dir="/root/RFB" local target_dir="/root/RFB"
@@ -107,16 +141,22 @@ setup_venv() {
# Обновление pip # Обновление pip
pip install --upgrade pip pip install --upgrade pip
# Обновляем requirements.txt перед установкой
update_requirements
if [ -f "requirements.txt" ]; then if [ -f "requirements.txt" ]; then
log_info "Установка зависимостей из requirements.txt..." log_info "Установка зависимостей из requirements.txt..."
pip install -r requirements.txt pip install -r requirements.txt
else else
log_warn "Файл requirements.txt не найден, устанавливаем базовые зависимости..." log_warn "Файл requirements.txt не найден, устанавливаем базовые зависимости..."
pip install streamlit requests pandas numpy plotly pip install streamlit requests pandas numpy plotly watchdog pillow streamlit_autorefresh
fi fi
# Установка дополнительных зависимостей которые могут понадобиться # Дополнительная проверка и установка streamlit_autorefresh на всякий случай
pip install watchdog pillow streamlit_autorefresh if ! python -c "import streamlit_autorefresh" 2>/dev/null; then
log_info "Устанавливаем streamlit_autorefresh..."
pip install streamlit_autorefresh
fi
# Проверка установки streamlit # Проверка установки streamlit
if ! [ -f ".venv/bin/streamlit" ]; then if ! [ -f ".venv/bin/streamlit" ]; then
@@ -124,54 +164,74 @@ setup_venv() {
exit 1 exit 1
fi fi
log_info "Проверка установленных пакетов:"
python -c "
import streamlit, requests, pandas, numpy, plotly, streamlit_autorefresh
print('✓ Все основные пакеты успешно импортируются')
"
log_info "Установленные пакеты:" log_info "Установленные пакеты:"
pip list --format=columns pip list --format=columns | grep -E "(streamlit|requests|pandas|numpy|plotly|autorefresh)"
} }
# Функция создания systemd сервиса # Функция создания systemd сервисов
create_systemd_service() { create_systemd_services() {
local team="$1" 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 for service in rfb-data.service rfb-visual.service rfb-stat.service; do
log_info "Остановка работающего сервиса..." if systemctl is-active --quiet $service; then
systemctl stop rfb-stat.service log_info "Остановка $service..."
systemctl stop $service
fi fi
if systemctl is-enabled --quiet $service; then
# Отключаем сервис если он включен log_info "Отключение $service..."
if systemctl is-enabled --quiet rfb-stat.service; then systemctl disable $service
log_info "Отключение сервиса..."
systemctl disable rfb-stat.service
fi fi
done
# Создаем запускаемый скрипт для избежания проблем с кавычками # Сервис для data
local startup_script="/root/RFB/start_rfb.sh" local data_service_file="/etc/systemd/system/rfb-data.service"
cat > $startup_script << EOF cat > $data_service_file << 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
[Unit] [Unit]
Description=RFB Stat v.1.0 Description=RFB Data Service
After=network.target After=network.target
[Service] [Service]
Type=simple Type=simple
User=root User=root
WorkingDirectory=/root/RFB 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 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 StandardOutput=journal
StandardError=journal StandardError=journal
@@ -180,13 +240,13 @@ WantedBy=multi-user.target
EOF EOF
# Настройка прав # Настройка прав
chmod 644 $service_file chmod 644 $data_service_file $visual_service_file
log_info "Перезагрузка systemd демонов..." log_info "Перезагрузка systemd демонов..."
systemctl daemon-reload systemctl daemon-reload
log_info "Включение сервиса..." log_info "Включение сервисов..."
systemctl enable rfb-stat.service systemctl enable rfb-data.service rfb-visual.service
} }
# Функция проверки файлов # Функция проверки файлов
@@ -212,9 +272,6 @@ check_required_files() {
fi fi
log_info "Все необходимые файлы присутствуют" log_info "Все необходимые файлы присутствуют"
# Проверка прав на выполнение
chmod +x visual.py get_data.py
} }
# Функция определения IP и команды # Функция определения IP и команды
@@ -299,27 +356,37 @@ check_port() {
return 0 return 0
} }
# Функция управления сервисом # Функция управления сервисами
manage_service() { manage_services() {
local action="$1" local action="$1"
case $action in case $action in
"start") "start")
log_info "Запуск сервиса..." log_info "Запуск сервисов..."
systemctl start rfb-stat.service systemctl start rfb-data.service rfb-visual.service
;; ;;
"restart") "restart")
log_info "Перезапуск сервиса..." log_info "Перезапуск сервисов..."
systemctl restart rfb-stat.service systemctl restart rfb-data.service rfb-visual.service
;; ;;
"stop") "stop")
log_info "Остановка сервиса..." log_info "Остановка сервисов..."
systemctl stop rfb-stat.service systemctl stop rfb-data.service rfb-visual.service
;; ;;
esac 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 check_port
# Создание systemd сервиса # Создание systemd сервисов
create_systemd_service "$final_team" create_systemd_services "$final_team"
log_info "Настройка завершена!" log_info "Настройка завершена!"
# Запуск сервиса # Запуск сервисов
manage_service "start" manage_services "start"
# Проверка статуса # Проверка статуса
sleep 3 check_services_status
log_info "Статус сервиса:"
systemctl status rfb-stat.service --no-pager
# Получаем IP еще раз для вывода # Получаем 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) 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 "Команда: $final_team"
log_info "Режим: $release" log_info "Режим: $release"
log_info "" log_info ""
log_info "Для просмотра логов: journalctl -u rfb-stat.service -f" log_info "Для просмотра логов:"
log_info "Для перезапуска: systemctl restart rfb-stat.service" log_info " Данные: journalctl -u rfb-data.service -f"
log_info "Для остановки: systemctl stop rfb-stat.service" 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 "==================================================" 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