GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire un comando in background con un ritardo?

( 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.


Linux
  1. Come eseguire un comando come amministratore di sistema (root)?

  2. Come inviare le app della riga di comando direttamente in background?

  3. Come posso eseguire un comando diverso ma con gli stessi argomenti?

  4. Come eseguire il comando Vim dalla shell?

  5. Come combinare il comando 'tar' con 'find'

Come eseguire i comandi Linux in background

Come utilizzare il comando RPM (con esempi)

Come modificare il colore di output di "Echo" in Linux

Come trovare file con il comando fd in Linux

Esegui processi in background in Linux usando il comando Screen

Come utilizzare il comando Sleep in Linux:spiegato con esempi