add start_rfb.sh

This commit is contained in:
2025-10-21 08:56:41 +00:00
parent 5ad95a1d57
commit 24860de8c6
3 changed files with 82 additions and 16 deletions

View File

@@ -37,7 +37,7 @@ install_packages() {
apt-get update apt-get update
log_info "Установка необходимых пакетов..." log_info "Установка необходимых пакетов..."
apt-get install -y python3 python3-pip python3-venv git systemd apt-get install -y python3 python3-pip python3-venv git systemd net-tools
# Проверка установки # Проверка установки
if ! command -v python3 &> /dev/null; then if ! command -v python3 &> /dev/null; then
@@ -58,20 +58,21 @@ install_packages() {
download_code() { download_code() {
local repo_url="https://git.tvstart.ru/ychernenko/RFB.git" local repo_url="https://git.tvstart.ru/ychernenko/RFB.git"
local release="$1" local release="$1"
local target_dir="/opt/RFB" local target_dir="/root/RFB"
log_info "Создание рабочей директории $target_dir..." log_info "Создание рабочей директории $target_dir..."
mkdir -p $target_dir mkdir -p $target_dir
cd $target_dir
if [ -d ".git" ]; then if [ -d "$target_dir/.git" ]; then
log_info "Обновление существующего репозитория..." log_info "Обновление существующего репозитория..."
cd $target_dir
git fetch --all git fetch --all
git checkout $release git checkout $release
git pull origin $release git pull origin $release
else else
log_info "Клонирование репозитория $repo_url..." log_info "Клонирование репозитория $repo_url..."
git clone $repo_url . git clone $repo_url $target_dir
cd $target_dir
git checkout $release git checkout $release
fi fi
@@ -89,7 +90,7 @@ download_code() {
# Функция настройки виртуального окружения # Функция настройки виртуального окружения
setup_venv() { setup_venv() {
local target_dir="/opt/RFB" local target_dir="/root/RFB"
cd $target_dir cd $target_dir
log_info "Создание виртуального окружения..." log_info "Создание виртуального окружения..."
@@ -103,6 +104,9 @@ setup_venv() {
log_info "Активация виртуального окружения и установка зависимостей..." log_info "Активация виртуального окружения и установка зависимостей..."
source .venv/bin/activate source .venv/bin/activate
# Обновление pip
pip install --upgrade pip
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
@@ -121,7 +125,7 @@ setup_venv() {
fi fi
log_info "Установленные пакеты:" log_info "Установленные пакеты:"
pip list pip list --format=columns
} }
# Функция создания systemd сервиса # Функция создания systemd сервиса
@@ -131,6 +135,31 @@ create_systemd_service() {
log_info "Создание systemd сервиса для команды: $team..." log_info "Создание systemd сервиса для команды: $team..."
# Останавливаем сервис если он уже запущен
if systemctl is-active --quiet rfb-stat.service; then
log_info "Остановка работающего сервиса..."
systemctl stop rfb-stat.service
fi
# Отключаем сервис если он включен
if systemctl is-enabled --quiet rfb-stat.service; then
log_info "Отключение сервиса..."
systemctl disable rfb-stat.service
fi
# Создаем запускаемый скрипт для избежания проблем с кавычками
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 > $service_file << EOF
[Unit] [Unit]
Description=RFB Stat v.1.0 Description=RFB Stat v.1.0
@@ -139,9 +168,8 @@ After=network.target
[Service] [Service]
Type=simple Type=simple
User=root User=root
WorkingDirectory=/opt/RFB WorkingDirectory=/root/RFB
Environment=PATH=/opt/RFB/.venv/bin ExecStart=$startup_script
ExecStart=/bin/bash -c 'cd /opt/RFB && source /opt/RFB/.venv/bin/activate && python3 get_data.py --team "$team" & streamlit run visual.py --server.port 8501 --server.address 0.0.0.0'
Restart=always Restart=always
RestartSec=3 RestartSec=3
StandardOutput=journal StandardOutput=journal
@@ -154,7 +182,7 @@ EOF
# Настройка прав # Настройка прав
chmod 644 $service_file chmod 644 $service_file
log_info "Перезагрузка systemd..." log_info "Перезагрузка systemd демонов..."
systemctl daemon-reload systemctl daemon-reload
log_info "Включение сервиса..." log_info "Включение сервиса..."
@@ -163,7 +191,7 @@ EOF
# Функция проверки файлов # Функция проверки файлов
check_required_files() { check_required_files() {
local target_dir="/opt/RFB" local target_dir="/root/RFB"
cd $target_dir cd $target_dir
local missing_files=() local missing_files=()
@@ -260,13 +288,40 @@ setup_firewall() {
# Функция проверки порта # Функция проверки порта
check_port() { check_port() {
local port=8501 local port=8501
if netstat -tuln | grep ":$port " > /dev/null; then if command -v netstat &> /dev/null && netstat -tuln | grep ":$port " > /dev/null; then
log_warn "Порт $port уже занят. Возможно, приложение уже запущено."
return 1
fi
if command -v ss &> /dev/null && ss -tuln | grep ":$port " > /dev/null; then
log_warn "Порт $port уже занят. Возможно, приложение уже запущено." log_warn "Порт $port уже занят. Возможно, приложение уже запущено."
return 1 return 1
fi fi
return 0 return 0
} }
# Функция управления сервисом
manage_service() {
local action="$1"
case $action in
"start")
log_info "Запуск сервиса..."
systemctl start rfb-stat.service
;;
"restart")
log_info "Перезапуск сервиса..."
systemctl restart rfb-stat.service
;;
"stop")
log_info "Остановка сервиса..."
systemctl stop rfb-stat.service
;;
esac
# Даем время сервису на запуск/остановку
sleep 2
}
# Основная функция # Основная функция
main() { main() {
local team="" local team=""
@@ -316,17 +371,21 @@ main() {
create_systemd_service "$final_team" create_systemd_service "$final_team"
log_info "Настройка завершена!" log_info "Настройка завершена!"
log_info "Запуск сервиса..."
systemctl start rfb-stat.service # Запуск сервиса
manage_service "start"
# Проверка статуса # Проверка статуса
sleep 3 sleep 3
log_info "Статус сервиса:" log_info "Статус сервиса:"
systemctl status rfb-stat.service --no-pager systemctl status rfb-stat.service --no-pager
# Получаем 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)
log_info "==================================================" log_info "=================================================="
log_info "Установка завершена успешно!" log_info "Установка завершена успешно!"
log_info "Приложение должно быть доступно по адресу: http://$ip_address:8501" log_info "Приложение должно быть доступно по адресу: http://${ip_address}:8501"
log_info "Команда: $final_team" log_info "Команда: $final_team"
log_info "Режим: $release" log_info "Режим: $release"
log_info "" log_info ""

7
start_rfb.sh Executable file
View File

@@ -0,0 +1,7 @@
#!/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

0
visual.py Normal file → Executable file
View File