Cómo ejecutar un script, dependiendo de la conexión a internet

48

A menudo monte un disco remoto usando sshfs. Me encantaría tener este soporte automáticamente. Sin embargo, si lo monte en mis scripts .bashrc o de inicio, el montaje a menudo falla porque aún no se ha realizado mi conexión inalámbrica a Internet.

¿Alguien sabe de una manera fácil de ejecutar un script bash cada vez que se realiza la conexión, o para montar automáticamente una unidad sshfs?

jmite
fuente

Respuestas:

56

Agregue su script a /etc/network/if-up.d/. Nombre su script sin una extensión '.sh'.

También después de agregar la ejecución del script chmod +x /etc/network/if-up.d/yourscriptnamepara dar el permiso necesario.

Asegúrese de que la interfaz de red (por ejemplo, wlan0 o eth0) que debe activar su script cuando se enciende se mencione en el archivo /etc/network/interfaces.

dedunumax
fuente
12
dentro de los scripts /etc/network/*.d/, puede usar la variable $IFACEpara saber qué interfaz está obteniendo una conexión, por lo que puede omitir el procedimiento si es la conexión por cable, por ejemplo.
Carlos Campderrós
¿Hay alguna manera de especificar para qué red específica desea hacer esto? cuando es mi red doméstica, quiero hacer el guión, pero cuando estoy fuera de la red, quizás no quiera ...
Joshua Robison
3
Esto en realidad no parece funcionar en absoluto. Sé que mis scripts funcionan porque puedo ejecutarlos usando ./ en la terminal y funcionan, pero cuando apago y conecto la conexión, no se llama a los scripts. ¿Hay algo que tenga que hacer para referenciarlos de alguna manera? colocar un script en if-up.d parece faltar un paso?!?!
Joshua Robison el
1
compruebe si tienen los permisos correctos por favor.
dedunumax
2
Agregue exactamente lo que debe entrar interfacescuando no está allí. ¿Es auto wlan0e iface wlan0 inet dhcpo algo mas?
Cookie
25

Nota del editor: Cuttlefish no se ha actualizado desde 2012 y no está en ningún repositorio actual de Ubuntu

Ubuntu 12.04

  • Instale Cuttlefish : una herramienta simple, que realiza reflejos en su computadora mediante la ejecución de acciones cuando se desencadenan eventos específicos.
  • Abre la sepia y haz clic en New.

    Paso 1

    • Póngale un nombre y cambie la opción Activado por estímulo a ON.
    • Haga clic en Estímulo , seleccione la categoría Red y escriba Conectar a WLAN . Haga clic en Aceptar.

    Paso 2

    • También puede seleccionar el SSID de la red inalámbrica y tiene la opción de verificar esto o no al inicio.

    Paso 3

    • Ahora tendrá que especificar una reacción. Vaya a la pestaña Reacción y haga clic en Agregar. Seleccione Aplicaciones de la categoría e Iniciar aplicación (en modo avanzado) del tipo.

    Paso 4

    • Ahora especifique el script que desea ejecutar en la opción ejecutable. Incluso puede pasar parámetros al script.

    Paso 5

    • ¡Y eso es! También asegúrese de agregar Cuttlefish en las aplicaciones de inicio. Vaya a Edición> Preferencias y habilite la opción de inicio automático.

    Paso 6

encender
fuente
66
la sepia está completamente rota y no ha visto una actualización por algún tiempo. Desearía que pudiera tener más desarrollo porque necesitamos algo como la aplicación Tasker de Android para Linux. Nadie quiere meterse con etc / network / interfaces y carpetas y scripts if-up. Solo dame algo en lo que pueda hacer clic o activar y desactivar.
Joshua Robison el
2

Contestaré esta parte de la pregunta de OP: "Me encantaría tener este soporte automáticamente"

Mi herramienta favorita para el montaje automático de recursos compartidos de red es autofs: https://help.ubuntu.com/community/Autofs

AutoFS es mi herramienta de elección para montar mi NAS, para todas mis computadoras portátiles y estaciones de trabajo.

" autofs es un programa para montar directorios automáticamente según sea necesario. Los montajes automáticos se montan solo cuando se accede a ellos y se desmontan después de un período de inactividad. Debido a esto, el montaje automático de recursos compartidos de NFS / Samba conserva el ancho de banda y ofrece mejores rendimiento general en comparación con los montajes estáticos a través de fstab " .

RBell
fuente
Su respuesta, aunque sea posible, puede llegar un poco tarde ya que el OP ya aceptó la otra respuesta. Por supuesto, su ayuda es apreciada, sin embargo, podría ser mejor si concentra sus esfuerzos en las preguntas sin respuesta
Wayne_Yux
Lo siento Wayne, RBell se rió por última vez aquí: la mejor respuesta (sobre el uso de Cuttlefish) ya no es relevante porque ese paquete está desactualizado, pero todavía existen autofs, y no lo habría visto si no fuera por esta publicación. Gracias RBell!
KlaymenDK
1

La mejor manera, simple y fácil, sería agregar un comando ascendente a cualquier interfaz en la que desee trabajar.

Las interfaces se pueden encontrar en el directorio "/ etc / network /" bajo el nombre de archivo "interfaces"

iface elan0 inet manual
    up filename.sh

Esto agregará el comando up a elan0. De manera similar, dé esto a la interfaz en la que quiera trabajar. Recuerde sangrar un espacio de tabulación.

Asegúrese de otorgar los permisos de ejecución al archivo.

sudo chmod 755 filename.sh
Revanth Kumar
fuente
1
¡Fantástico! Funciona con tun0interfaces VPN gestionadas por network-manager. La clave es el uso de inet manual.
KrisWebDev
1

En lo que a mí respecta, la /etc/network/if-up.d/solución no me funcionó como cuando agregué /etc/network/interfaceslo siguiente:

auto wlp58s0
iface wlp58s0 inet dhcp
post-up /home/augustin/Config/myscript.sh

Wifi comenzará después de reiniciar.

Pero después de algunas dificultades, desde este enlace , lo que funcionó fue agregar el script /etc/NetworkManager/dispatcher.d/en el formulario 90myscript.shdonde 90está el nivel de prioridad del script y con el siguiente formulario:

#!/bin/bash

IF=$1
STATUS=$2

if [ "$IF" == "wlp58s0" ]
then
    case "$2" in
        up)
        # interface is up
        ;;
        down)
        # interface will be down
        ;;
        pre-up)
        # interface will be up
        ;;
        post-down)
        # interface is down
        ;;
        *)
        ;;
    esac
fi

Supongo que hay problemas entre quién controla la configuración de la red a nivel del sistema y, a veces, el networkcomportamiento predeterminado se deja atrás del despachador.

Además, para aquellos que desean, como yo, intentar tener un enlace simbólico al script (para almacenar el archivo en una mejor ubicación), desafortunadamente no funcionó para mí.

¡Espero que esto ayude!

Augustin Riedinger
fuente
1

systemd parece haberse apoderado de las redes hoy en día.

$ networkctl
WARNING: systemd-networkd is not running, output will be incomplete.

IDX LINK             TYPE               OPERATIONAL SETUP
  1 lo               loopback           n/a         unmanaged
  2 enp0s25          ether              n/a         unmanaged
  3 wlo1             wlan               n/a         unmanaged

3 links listed.

También tiene unidades correspondientes a las interfaces.

$ systemctl list-units |grep wlo1
sys-devices-pci0000:00-0000:00:1c.3-0000:24:00.0-net-wlo1.device                                                        loaded active plugged   Centrino Ultimate-N 6300 (3x3 AGN)
sys-subsystem-net-devices-wlo1.device                                                                                   loaded active plugged   Centrino Ultimate-N 6300 (3x3 AGN)

Aparentemente puede usarlos en los archivos de la unidad de servicio. Tan solo cree una unidad de servicio para ejecutar su script y use algo como eso dentro para que se ejecute condicionalmente en la red:

BindsTo=sys-subsystem-net-devices-wlo1.device
After=sys-subsystem-net-devices-wlo1.device

¡Buena suerte! No he probado esto, por lo que "su kilometraje puede variar".

Fuentes:

Rolf
fuente