Quiero ejecutar una conexión ppp cuando mi módem USB está conectado, así que uso esta udev
regla:
ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="16d8",\
RUN+="/usr/local/bin/newPPP.sh $env{DEVNAME}"
(Mi módem aparece /dev
como ttyACM0
)
newPPP.sh:
#!/bin/bash
/usr/bin/pon prov $1 >/dev/null 2>&1 &
Problema:
El udev
evento se dispara y newPPP.sh se está ejecutando, pero el newPPP.sh
proceso finaliza después de ~ 4-5s. ppp
no tiene tiempo para conectarse (su tiempo de espera es de 10 segundos para acceso telefónico).
¿Cómo puedo ejecutar un proceso a largo plazo que no se eliminará?
Intenté usarlo nohup
, pero tampoco funcionó.
Sistema: Arch Linux
Actualizar
Encontré una solución aquí , gracias a maxschlepzig .
Solía at now
ejecutar mi trabajo separado del proceso udev.
Pero la única pregunta sigue sin respuesta: ¿Por qué trabajar nohup
y &
no trabajar?
Shell tiene la capacidad de ejecutar comandos en segundo plano:
Los comandos agrupados por las llaves con ampersand después de ellos se ejecutarán de forma asíncrona en una subshell. Lo uso para conectarme automáticamente cuando se inserta y se conmuta un módem USB. Tarda unos 20 segundos y funciona bien bajo udev.
fuente
Lo tengo para trabajar con setsid. Mi RUN parte de la regla udev:
luego en el guión:
La primera llamada al script regresa con el estado de salida 0, pero la segunda llamada al script continúa ejecutándose con PPID = 1.
fuente
Probablemente porque su proceso padre finaliza y la señal de terminación se propaga a sus hijos, que no lo bloquean (y en caso de
SIGKILL
que ni siquiera puedan).fuente