Автоматическое обновление конфигурации 3proxy каждые пол часа

В продолжение статьи про балансировку нагрузки в 3proxy, конфигурацию 3proxy можно обновлять динамически, добавляя в неё проксики и перезапуская сервис. на примере скрипт-демон, который это делает на bash из бесплатных прокси(качество этих прокси оставляет желать лучшего):

#!/bin/bash

# Функция для загрузки прокси и добавления префикса
download_proxies() {
    local url=$1
    local type=$2

    curl -s $url | while read -r line; do
        echo "$type:$line"
    done
}

while true; do
    # Загружаем прокси
    http_proxies=($(download_proxies "https://raw.githubusercontent.com/monosans/proxy-list/main/proxies_anonymous/http.txt" "http"))
    socks4_proxies=($(download_proxies "https://raw.githubusercontent.com/monosans/proxy-list/main/proxies_anonymous/socks4.txt" "socks4"))
    socks5_proxies=($(download_proxies "https://raw.githubusercontent.com/monosans/proxy-list/main/proxies_anonymous/socks5.txt" "socks5"))

    # Объединяем все прокси в один массив
    all_proxies=("${http_proxies[@]}" "${socks4_proxies[@]}" "${socks5_proxies[@]}")

    # Подсчитываем общее количество прокси
    total_proxies=${#all_proxies[@]}

    # Рассчитываем вес
    weight=$((1000 / total_proxies))

    # Перемешиваем прокси
    shuffled_proxies=($(for i in "${all_proxies[@]}"; do echo $i; done | shuf))

    # Создаем файл конфигурации
    {
        echo "nscache 65536"
        echo "nserver 8.8.8.8"
        echo "nserver 8.8.4.4"
        echo ""
        echo "log /logs/3proxy-%y%m%d.log D"
        echo ""
        echo "auth iponly"
        echo "allow *"
        for proxy in "${shuffled_proxies[@]}"; do
            IFS=':' read -ra proxy_parts <<< "$proxy"
            type=${proxy_parts[0]}
            ip=${proxy_parts[1]}
            port=${proxy_parts[2]}
            echo "parent $weight $type $ip $port"
        done
        echo ""
        echo "timeouts 10 15 30 60 180 1800 15 60"
        echo "proxy -p3128 -i127.0.0.1"
    } > /etc/3proxy/conf/3proxy.cfg

    service 3proxy stop
    sleep 5
    service 3proxy start

    # Выводим общее количество прокси и рассчитанный вес
    # echo "Total proxies: $total_proxies"
    # echo "Weight: $weight"
    # echo "Configuration saved to 3proxy.cfg"

    # Пауза на 30 минут
    sleep 1800
done

Скрипт рассчитывает вес и распределяет их по всем прокси. В данном случае не предусмотрено, что их общее количество будет более 1000, поэтому это чревато ошибкой конфига, если источники будут другими или общее количество превысит суммарный вес в 1000.

Чтобы запустить данный демон из другого скрипта или cli, не забываем как правильно отвалиться от исполняемого потока. В данном случае так:

./proxy.sh >/dev/null 2>&1 &

на /dev/null нужно направлять не только стандартный поток вывода(0), но и поток ошибок(2).

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *