Jump to content

winnie57

Forum Members
  • Posts

    4
  • Joined

  • Last visited

Posts posted by winnie57

  1. В 26.09.2022 в 15:41, batonskij сказал:

    Удивительно как вы справились, в крайней версии скрипта нет строк установки пакета jq для разбора. 

    Скрипт банально не заработает. 

    Скрипт работает, но только при установленном уже пакете jq. При отладке убрал его проверку и установку из скрипта. Вот сейчас вернул и выложил обновлённый скрипт.

    #!/opt/bin/sh
    
    ConnName=Rostelecom
    counter=/opt/tmp/CountReconnectWan.txt
    previp=/opt/tmp/previp.txt
    max_tries=10
    
    if ! opkg list-installed | grep '^jq' > /dev/null; then
    	opkg update
    	opkg install jq
    fi
    
    sleep 3
    
    RESP=$(wget -qO - http://localhost:79/rci/show/interface | jq -r ".[] | select(.description==\"$ConnName\") | select(.defaultgw==true) | .id, .description, .address")
    [ -n "$RESP" ] || exit 1
    
    _ip=$(echo $RESP | awk '{print $3}')
    _name=$(echo $RESP | awk '{print $2}')
    _iface=$(echo $RESP | awk '{print $1}')
    
    if echo "$_ip" | grep -qE "^(10\.|100\.6[4-9]\.|100\.[7-9][0-9]\.|100\.1[01][0-9]\.|100\.12[0-7]\.|172\.1[6-9]\.|172\.2[0-9]\.|172\.3[01]\.|null)"; then
        [ -f "$counter" ] || echo "0" > $counter
        try_nr=$(cat $counter)
        try_nr=$((++try_nr))
        if [ $try_nr -gt $max_tries ]; then
            echo "0" > $counter
    		logger -p local0.error -t white_ip[$$] "Provider: $_name, interface: $_iface. Too much tries. Exit"
            exit 1
        fi
        echo "$try_nr" > $counter
        logger -p local0.error -t white_ip[$$] "Provider: $_name, interface: $_iface. Reloading WAN due grey IP - $_ip. Try $try_nr of $max_tries."
    	wget -qO - --post-data="[{\"interface\":{\"name\":\"$_iface\",\"down\":{}}}]" http://localhost:79/rci/
        sleep 3
        wget -qO - --post-data="[{\"interface\":{\"name\":\"$_iface\",\"up\":{}}}]" http://localhost:79/rci/
    else
        echo "0" > $counter
        [ -f "$previp" ] || echo "0.0.0.0" > $previp
        _previp=$(cat $previp)
        if [ "$_previp" != "$_ip" ]; then
            logger -p local0.notice -t white_ip[$$] "Provider: $_name, interface: $_iface, white IP - $_ip."
            echo "$_ip" > $previp
    	else
    		logger -p local0.notice -t white_ip[$$] "Provider: $_name, interface: $_iface, white IP - $_ip (address unchanged)."
        fi
    	exit 0
    fi

     

    030-rostelecom.sh

    • Thanks 2
  2. В 05.09.2022 в 22:23, zirm33 сказал:

    Скиньте, пожалуйста, рабочий скрипт файлом с правильными правами. (Rostelecom)

    Несмотря на изменение прав на файл скрипта он то работает, то нет (чаще). Заметил что при автоматическом запуске скрипта когда провайдер дергает подключение (у меня это каждые 72 часа) в логе и служебном файле /opt/tmp/previp.txt записывается значение "null". То есть в момент срабатывания скрипта WAN интерфейс ещё не получил адрес от провайдера. Скрипт это значение не обрабатывает и завершается с кодом 1. Для того чтобы это устранить я вставил команду задержки перед командой получения адреса провайдера на 3 секунды (строка 13).

    #!/opt/bin/sh
    
    ConnName=Rostelecom
    counter=/opt/tmp/CountReconnectWan.txt
    previp=/opt/tmp/previp.txt
    max_tries=10
    
    if ! opkg list-installed | grep '^jq' > /dev/null; then
    	opkg update
    	opkg install jq
    fi
    
    sleep 3
    
    RESP=$(wget -qO - http://localhost:79/rci/show/interface | jq -r ".[] | select(.description==\"$ConnName\") | select(.defaultgw==true) | .id, .description, .address")
    [ -n "$RESP" ] || exit 1
    
    _ip=$(echo $RESP | awk '{print $3}')
    _name=$(echo $RESP | awk '{print $2}')
    _iface=$(echo $RESP | awk '{print $1}')
    
    if echo "$_ip" | grep -qE "^(10\.|100\.6[4-9]\.|100\.[7-9][0-9]\.|100\.1[01][0-9]\.|100\.12[0-7]\.|172\.1[6-9]\.|172\.2[0-9]\.|172\.3[01]\.|null)"; then
        [ -f "$counter" ] || echo "0" > $counter
        try_nr=$(cat $counter)
        try_nr=$((++try_nr))
        if [ $try_nr -gt $max_tries ]; then
            echo "0" > $counter
    		logger -p local0.error -t white_ip[$$] "Provider: $_name, interface: $_iface. Too much tries. Exit"
            exit 1
        fi
        echo "$try_nr" > $counter
        logger -p local0.error -t white_ip[$$] "Provider: $_name, interface: $_iface. Reloading WAN due grey IP - $_ip. Try $try_nr of $max_tries."
    	wget -qO - --post-data="[{\"interface\":{\"name\":\"$_iface\",\"down\":{}}}]" http://localhost:79/rci/
        sleep 3
        wget -qO - --post-data="[{\"interface\":{\"name\":\"$_iface\",\"up\":{}}}]" http://localhost:79/rci/
    else
        echo "0" > $counter
        [ -f "$previp" ] || echo "0.0.0.0" > $previp
        _previp=$(cat $previp)
        if [ "$_previp" != "$_ip" ]; then
            logger -p local0.notice -t white_ip[$$] "Provider: $_name, interface: $_iface, white IP - $_ip."
            echo "$_ip" > $previp
    	else
    		logger -p local0.notice -t white_ip[$$] "Provider: $_name, interface: $_iface, white IP - $_ip (address unchanged)."
        fi
    	exit 0
    fi

    можете просто добавить команду задержки в ваш скрипт:

    sleep 3

    Или возьмите готовый. Скрипт необходимо поместить в папку /opt/etc/ndm/wan.d и выдать ему права на выполнение командой:

    chmod +x /opt/etc/ndm/wan.d/030-rostelecom.sh

    или

    chmod 0755 /opt/etc/ndm/wan.d/030-rostelecom.sh

     

    030-rostelecom.sh

    • Thanks 4
  3. В 29.07.2022 в 10:41, zirm33 сказал:

    Поделитесь, пожалуйста, рабочим скриптом на прошивке 3.8.3. 

    У меня тоже не работал. Оказалось что права на файл скрипта были 0644, а должны быть 0755. Исправил и всё заработало. Проверьте у себя.

    • Thanks 1
×
×
  • Create New...