( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &
In questo modo il tuo script continua o ripristini il controllo immediatamente, mentre una nuova attività in background dello script si avvia, con due comandi:sleep ed echo.
L'errore comune sta tentando di fornire sleep
o echo
o entrambi i &
che non funzionerà come previsto. Avvio di una serie di comandi in ()
tuttavia li genera in un processo shell separato, che puoi quindi inviare interi in background con &
.
A quell'arguzia, dove l'ho trovato attivamente utile. In un dispositivo embedded che sviluppo c'è l'applicazione principale che funziona con un watchdog. Se fallisce in un modo che attiva il ripristino del watchdog subito dopo l'avvio, ripetutamente, è difficile risolverlo da remoto poiché il periodo tra l'avvio del sistema operativo e il ripristino è piuttosto breve, non abbastanza per entrare in ssh e bloccare l'avvio dell'app. Quindi ho bisogno di un modo per determinare se il sistema è stato riavviato così velocemente e introdurre un ritardo se lo ha fatto, per darmi il tempo di aggiustarlo manualmente.
[ -f /tmp/startdelay ] && sleep 30
touch /tmp/startdelay
( sleep 30 ; rm /tmp/startdelay ) &
[ -f /tmp/noautostart ] && exit 0
start_app
Se accedo ed eseguo touch /tmp/noautostart
l'app principale non si avvia. Se entra in gioco il cane da guardia, rm /tmp/startdelay
non verrà eseguito e la prossima volta che il sistema si avvia, mi darà 30 secondi in più per fermarlo. In caso contrario, il riavvio sarà rapido, senza ritardi.
usa il at
comando
echo "echo \"80\" > /sys/class/leds/blue/brightness" | at now + 5 min
che verrà eseguito in background
Se vuoi che qualcosa venga eseguito in 5 minuti, ma il resto del tuo programma continui (o finisca), devi mettere in background anche la sospensione:
#!/bin/bash
runWithDelay () {
sleep $1;
shift;
"${@}";
}
runWithDelay 3 echo world &
echo hello
Questo stamperà hello
e poi 3 secondi dopo (dopo che il programma principale è terminato), print world
.
La parte importante è il &
per eseguire il fork dell'esecuzione della funzione in background.