Сценарий раньше выполнял 'части выполнения' для portmapping, использование программы Java после обработки отказа не работает

#!/bin/sh
# Setup portforwarding on router depending on interface running scripts from a directory 10.0.0.30 being eth0 represented by folder 30 and 10.0.0.31 being wlan0 represented by folder 31
eth0_status=$(cat /sys/class/net/eth0/operstate)
wlan0_status=$(cat /sys/class/net/wlan0/operstate)
if [ "$eth0_status" = "up" ] && [ "$wlan0_status" = "down" ] ;
    then
      CURRDEV=eth0
fi  
if [ "$eth0_status" = "down" ] && [ "$wlan0_status" = "up" ] ;
    then
       CURRDEV=wlan0
fi
if [ "$eth0_status" = "down" ] && [ "$wlan0_status" = "down" ] ;
    then
       CURRDEV=
fi
if [ "$CURRDEV" = "eth0" ] ;
    then
       run-parts "/opt/portmapper/30"
       echo "Current device Ethernet"
elif [ "$CURRDEV" = "wlan0" ] ;
     then
       run-parts "/opt/portmapper/31"
       echo "Current device WiFi"
else
   echo "No changes need to be made to port mappings"
fi

Сценарий в настоящее время работает, но чтобы это было меньше загрузки, мне нужна проверка переменной, чтобы препятствовать тому, чтобы части выполнения выполнили каждый раз выполнения сценария. Мне только нужен он для выполнения однажды, когда устройство изменяется от одного до другого и не неоднократно каждый раз, когда я заявляю portmappings путем запущения скрипта.

Примером сценария отображения порта, который я имею в/opt/portmapper/30|31 каталоге 30 или 31 каталога, является eth0 набора устройств Ethernet или wlan0 соответственно.

 #!/bin/sh
    exec java -jar /opt/portmapper/portmapper.jar -lib org.chris.portmapper.router.sbbi.SBBIRouterFactory -add -protocol TCP -internalPort 443 -externalPort 443 -ip 10.0.0.30 ; sleep 2 ;
 fi

Я первоначально еще вытянул его из этого рабочего сценария в/etc/NetworkManager/dispatcher.d/-, часть не работает. Я должен работать над этим также. Заметьте, что эта часть имеет [[]] вместо []. Если я помещаю одиночные скобки сюда, сценарий не работает.

 #!/bin/bash
 # Enable/disable wlan0 depending on eth0 and wlan0 current state
 eth0_status=$(cat /sys/class/net/eth0/operstate)
 wlan0_status=$(cat /sys/class/net/wlan0/operstate)
 if [[ "$eth0_status" = "up" ]];
     then
      nmcli con down id "wlan0"
 elif [[ "$wlan0_status" = "down" ]] && [[ "$eth0_status" = "down" ]];
   then
    nmcli con up id "wlan0"
 else
    nmcli nm eth0 on
    nmcli nm wlan0 off
 fi
0
задан 11 March 2016 в 01:39

1 ответ

В основном то, что Вы хотите, должно изменить порт, отображающийся до run-parts каждый раз интерфейсные используемые изменения, старающиеся не работать run-parts, если бы используемый интерфейс не изменился, так как прошлый раз run-parts был выполнен.

необходимо будет сохранить последний интерфейс в состоянии использования где-нибудь и каждый раз, когда скрипт запущен, сравнивают текущий интерфейс, используемый с этим так или иначе; этот сценарий делает это (он обновляет текущий интерфейс, используемый в /opt/mapper/prevdev каждый раз, когда изменение происходит):

#!/bin/sh
eth0_status=$(cat /sys/class/net/eth0/operstate)
wlan0_status=$(cat /sys/class/net/wlan0/operstate)
touch /opt/portmapper/prevdev # Creates /opt/portmapper/prevdev if it doesn't exist
prevdev=$(cat /opt/portmapper/prevdev)
if [ "$eth0_status" = "up" ] && [ "$wlan0_status" = "down" ]; then # We're currently on Ethernet
    currdev=eth0
fi
if [ "$eth0_status" = "down" ] && [ "$wlan0_status" = "up" ]; then # We're currently on WiFi
    currdev=wlan0
fi
if [ "$currdev" != "$prevdev" ]; then # The interface in use has changed since the last time we checked
    if [ "$currdev" = "eth0" ]; then # We're currently on Ethernet
        run-parts /opt/portmapper/30
        echo 'Current device and portmappings are on Ethernet'
        echo 'eth0' >/opt/portmapper/prevdev # Updates /opt/mapper/prevdev
    else # We're currently on WiFi
        run-parts /opt/portmapper/31
        echo 'Current device and portmappings are on WiFi'
        echo 'wlan0' >/opt/portmapper/prevdev # Updates /opt/mapper/prevdev
    fi
else
    echo 'No changes need to be made to port mappings'
fi
0
ответ дан 24 July 2019 в 08:48

Другие вопросы по тегам:

Похожие вопросы: