#!/bin/bash SERVICE_NAME="RouterSyncNavigator.service" UNIT_FILE_PATH="/etc/systemd/system/$SERVICE_NAME" SCRIPT_DIR="$(dirname "$(realpath "$0")")" # Директория, в которой находится сам скрипт # Проверка наличия необходимых файлов if [ ! -f "$SCRIPT_DIR/config.ini" ] || [ ! -f "$SCRIPT_DIR/main.py" ]; then echo "Не найдены файлы config.ini и main.py, необходимые для работы скрипта." read -p "Скачать Router Sync Navigator с GitHub? (y/n): " download_choice if [ "$download_choice" = "y" ]; then echo "Скачивание файлов..." # Скачивание файлов curl -L -o "$SCRIPT_DIR/main.py" "https://raw.githubusercontent.com/Ground-Zerro/DNS-RouteSync-Navigator/main/main.py" curl -L -o "$SCRIPT_DIR/config.ini" "https://raw.githubusercontent.com/Ground-Zerro/DNS-RouteSync-Navigator/main/config.ini" curl -L -o "$SCRIPT_DIR/filter.txt" "https://raw.githubusercontent.com/Ground-Zerro/DNS-RouteSync-Navigator/main/filter.txt" if [ $? -eq 0 ]; then echo "Router Sync Navigator загружен, перед запуском укажите настройки в config.ini и домены в filter.txt." else echo "Ошибка при загрузке файлов. Проверьте ваше соединение с интернетом и попробуйте снова." exit 1 fi else exit 1 fi fi # Функция для создания файла юнита create_unit_file() { # Установка прав 777 на файл main.py перед созданием файла юнита chmod 777 "$SCRIPT_DIR/main.py" sudo bash -c "cat > $UNIT_FILE_PATH" << EOF [Unit] Description=Router Sync Navigator Service After=network.target [Service] Type=simple ExecStart=/usr/bin/python3 $SCRIPT_DIR/main.py WorkingDirectory=$SCRIPT_DIR Restart=always Environment=PYTHONUNBUFFERED=1 StandardError=file:$SCRIPT_DIR/work.log [Install] WantedBy=multi-user.target EOF } # Функция для замены путей в файле main.py и config.ini update_main_py() { # Замена путей в main.py sed -i "s|read_config('config.ini')|read_config('$SCRIPT_DIR/config.ini')|" "$SCRIPT_DIR/main.py" # Проверка и замена в config.ini, если строки нет if ! grep -q "domain_file = $SCRIPT_DIR/" "$SCRIPT_DIR/config.ini"; then sed -i "s|domain_file = |domain_file = $SCRIPT_DIR/|" "$SCRIPT_DIR/config.ini" fi } # Функция для проверки статуса службы check_status() { systemctl is-active --quiet $SERVICE_NAME } # Функция для управления службой manage_service() { if check_status; then echo "Служба $SERVICE_NAME работает." echo "Что вы хотите сделать?" echo "1. Остановить службу" echo "2. Перезапустить службу" echo "3. Ничего не делать" read -p "Выберите опцию (1/2/3): " option case $option in 1) sudo systemctl stop $SERVICE_NAME if [ $? -eq 0 ]; then echo "Служба полностью остановлена." else echo "Ошибка при остановке службы." fi ;; 2) sudo systemctl restart $SERVICE_NAME if [ $? -eq 0 ]; then echo "Служба успешно перезапущена." else echo "Ошибка при перезапуске службы." fi ;; 3) ;; *) echo "Некорректный выбор. Выберите 1, 2 или 3." ;; esac else echo "Служба RouterSyncNavigator:" echo "1. Запустить" echo "2. Удалить" read -p "Выберите опцию (1/2): " option case $option in 1) sudo systemctl start $SERVICE_NAME > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "Служба $SERVICE_NAME запущена." else echo "Ошибка при запуске службы $SERVICE_NAME." fi ;; 2) sudo systemctl stop $SERVICE_NAME sudo systemctl disable $SERVICE_NAME sudo rm -f $UNIT_FILE_PATH sudo systemctl daemon-reload echo "Служба $SERVICE_NAME удалена из системы." ;; *) echo "Некорректный выбор. Выберите 1 или 2." ;; esac fi } # Проверка существования файла юнита if [ ! -f "$UNIT_FILE_PATH" ]; then echo "RouterSyncNavigator:" echo "1. Установить как системную службу" echo "2. Запустить в Python" echo "3. Ничего не делать" read -p "Выберите опцию (1/2/3): " option case $option in 1) create_unit_file sudo systemctl daemon-reload > /dev/null 2>&1 sudo systemctl enable $SERVICE_NAME > /dev/null 2>&1 sudo systemctl start $SERVICE_NAME > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "Служба $SERVICE_NAME установлена и запущена." else echo "Ошибка при запуске службы $SERVICE_NAME." fi ;; 2) /usr/bin/python3 "$SCRIPT_DIR/main.py" if [ $? -eq 0 ]; then echo "Скрипт main.py выполнен." else echo "Ошибка при выполнении скрипта main.py." fi ;; 3) ;; *) echo "Некорректный выбор. Выберите 1, 2 или 3." ;; esac else # Если файл юнита существует, просто убедитесь, что служба запущена manage_service fi # Обновление путей в файле main.py update_main_py