( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &
De esa manera, su secuencia de comandos continúa, o restaura el control de inmediato, mientras que una nueva tarea en segundo plano del script comienza, con dos comandos:dormir y hacer eco.
El error común es intentar dar sleep
o echo
o ambos &
que no funcionará según lo previsto. Lanzamiento de una serie de comandos en ()
aunque los genera en un proceso de shell separado, que luego puede enviar en segundo plano con &
.
A ese ingenio, donde lo encontré activamente útil. En un dispositivo integrado que desarrollo, está la aplicación principal que funciona con un perro guardián. Si falla de una manera que activa el reinicio del perro guardián poco después del inicio, repetidamente, es difícil solucionarlo de forma remota, ya que el período entre el inicio del sistema operativo y el reinicio es bastante corto, no lo suficiente como para entrar y bloquear el inicio de la aplicación. Así que necesito una forma de determinar que el sistema se reinició tan rápido e introducir un retraso si lo hizo, para tener tiempo de arreglarlo manualmente.
[ -f /tmp/startdelay ] && sleep 30
touch /tmp/startdelay
( sleep 30 ; rm /tmp/startdelay ) &
[ -f /tmp/noautostart ] && exit 0
start_app
Si inicio sesión y realizo touch /tmp/noautostart
la aplicación principal no se iniciará. Si el perro guardián se activa, rm /tmp/startdelay
no se realizará y la próxima vez que se inicie el sistema, me dará 30 segundos adicionales para detenerlo. De lo contrario, el reinicio será rápido, sin demora.
utiliza el at
comando
echo "echo \"80\" > /sys/class/leds/blue/brightness" | at now + 5 min
que se ejecutará en segundo plano
Si desea que algo se ejecute en 5 minutos, pero que el resto de su programa continúe (o finalice), también debe poner en segundo plano la suspensión:
#!/bin/bash
runWithDelay () {
sleep $1;
shift;
"${@}";
}
runWithDelay 3 echo world &
echo hello
Esto imprimirá hello
y luego 3 segundos más tarde (después de que el programa principal haya salido), imprima world
.
La parte importante es el &
para bifurcar la ejecución de la función en segundo plano.