winnie57
-
Posts
4 -
Joined
-
Last visited
Content Type
Profiles
Forums
Gallery
Downloads
Blogs
Events
Posts posted by winnie57
-
-
В 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
- 4
-
В 29.07.2022 в 10:41, zirm33 сказал:
Поделитесь, пожалуйста, рабочим скриптом на прошивке 3.8.3.
У меня тоже не работал. Оказалось что права на файл скрипта были 0644, а должны быть 0755. Исправил и всё заработало. Проверьте у себя.
- 1
-
В 29.07.2022 в 11:16, Rezdbic сказал:
Он есть на предыдущей странице
Этот скрипт у меня тоже почему то перестал работать на прошивке 3.8.3
«Белый» IP от Ростелеком с помощью Entware
in Вопросы по сборке и настройке Opkg
Posted
Скрипт работает, но только при установленном уже пакете 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