Script usado para executar 'run-parts' para mapeamento de portas usando o programa Java quando o failover não funciona

0
#!/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

O script atualmente funciona, mas para que seja menos carregado, eu preciso da verificação de variáveis para impedir que as peças executadas sejam executadas toda vez que o script é executado. Eu só preciso que ele seja executado uma vez quando o dispositivo mudar de um para outro e não repetidamente toda vez que eu declarar os mapas de portas executando o script.

Exemplo de script de mapeamento de portas que eu tenho no diretório de diretório / opt / portmapper / 30 | 31 30 ou 31 são os dispositivos de ethernet definidos como eth0 ou wlan0, respectivamente.

 #!/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

Eu originalmente o extraí deste script de trabalho em /etc/NetworkManager/dispatcher.d/ - a parte else não funciona. Eu tenho que trabalhar nisso também. Observe que esta parte tem [[]] em vez de []. Se eu colocar colchetes aqui, o script não funciona.

 #!/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
    
por Vincent Bird 10.03.2016 / 19:33

1 resposta

0

Basicamente, o que você deseja é alterar o mapeamento de porta por run-parts sempre que a interface em uso for alterada, evitando executar run-parts se a interface em uso não tiver sido alterada desde a última vez em que run-parts foi executado. / p>

Você precisará armazenar a última interface no status de uso em algum lugar e toda vez que o script for executado, compare a interface atual em uso contra isso de alguma forma; esse script faz isso (atualiza a interface atual em uso em /opt/mapper/prevdev cada vez que uma alteração ocorre):

#!/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
    
por kos 10.03.2016 / 23:31