( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &
Auf diese Weise wird Ihr Skript fortgesetzt, oder Sie stellen die Kontrolle sofort wieder her, während eine neue Hintergrundaufgabe ausgeführt wird des Skripts beginnt mit zwei Befehlen:sleep und echo.
Der häufigste Fehler ist der Versuch, entweder sleep
anzugeben oder echo
oder beides &
was nicht wie beabsichtigt funktioniert. Starten einer Reihe von Befehlen in ()
erzeugt sie jedoch in einem separaten Shell-Prozess, den Sie dann mit &
vollständig in den Hintergrund schicken können .
Insofern, wo ich es aktiv nützlich fand. In einem eingebetteten Gerät, das ich entwickle, gibt es die Hauptanwendung, die mit einem Watchdog arbeitet. Wenn es auf eine Weise fehlschlägt, die den Watchdog-Reset kurz nach dem wiederholten Start auslöst, ist es schwierig, es aus der Ferne zu beheben, da der Zeitraum zwischen dem Start des Betriebssystems und dem Reset ziemlich kurz ist und nicht ausreicht, um sich per SSH einzuloggen und den App-Start zu blockieren. Also brauche ich einen Weg, um festzustellen, dass das System so schnell neu gestartet wurde, und eine Verzögerung einzuführen, falls dies der Fall ist, um mir Zeit zu geben, es manuell zu beheben.
[ -f /tmp/startdelay ] && sleep 30
touch /tmp/startdelay
( sleep 30 ; rm /tmp/startdelay ) &
[ -f /tmp/noautostart ] && exit 0
start_app
Wenn ich mich anmelde und touch /tmp/noautostart
ausführe Die Haupt-App startet nicht. Wenn der Watchdog eingreift, rm /tmp/startdelay
wird nicht ausgeführt und beim nächsten Start des Systems habe ich zusätzliche 30 Sekunden Zeit, um es zu stoppen. Andernfalls erfolgt der Neustart schnell und ohne Verzögerung.
Verwenden Sie den at
Befehl
echo "echo \"80\" > /sys/class/leds/blue/brightness" | at now + 5 min
das im Hintergrund läuft
Wenn Sie möchten, dass etwas in 5 Minuten ausgeführt wird, der Rest Ihres Programms jedoch fortgesetzt (oder beendet) wird, müssen Sie auch den Ruhezustand in den Hintergrund versetzen:
#!/bin/bash
runWithDelay () {
sleep $1;
shift;
"${@}";
}
runWithDelay 3 echo world &
echo hello
Dadurch wird hello
ausgegeben und dann 3 Sekunden später (nachdem das Hauptprogramm beendet wurde), drucke world
.
Der wichtige Teil ist der &
um die Funktionsausführung in den Hintergrund zu verzweigen.