( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &
Tímto způsobem bude váš skript pokračovat, nebo okamžitě obnovíte kontrolu, zatímco nový úkol na pozadí skriptu se spustí dvěma příkazy:sleep a echo.
Běžná chyba se pokouší zadat buď sleep
nebo echo
nebo obě &
který nebude fungovat podle představ. Spuštění řady příkazů v ()
ačkoli je vytvoří v samostatném procesu shellu, který pak můžete poslat celé na pozadí pomocí &
.
K tomu vtipu, kde jsem to považoval za aktivně užitečné. Ve vestavěném zařízení, které vyvíjím, je hlavní aplikace, která pracuje s hlídacím psem. Pokud selže způsobem, který spouští reset hlídacího psa brzy po spuštění, opakovaně, je těžké to na dálku opravit, protože doba mezi startem OS a resetem je poměrně krátká, nestačí na ssh a zablokuje spuštění aplikace. Potřebuji tedy způsob, jak zjistit, že se systém restartoval tak rychle, a zavést zpoždění, pokud ano, abych měl čas to opravit ručně.
[ -f /tmp/startdelay ] && sleep 30
touch /tmp/startdelay
( sleep 30 ; rm /tmp/startdelay ) &
[ -f /tmp/noautostart ] && exit 0
start_app
Pokud se přihlásím a provedu touch /tmp/noautostart
hlavní aplikace se nespustí. Pokud hlídací pes zasáhne, rm /tmp/startdelay
se neprovede a při příštím spuštění systému mi dá dalších 30 s na jeho zastavení. Jinak bude restart rychlý, bez zpoždění.
použijte at
příkaz
echo "echo \"80\" > /sys/class/leds/blue/brightness" | at now + 5 min
který poběží na pozadí
Pokud chcete, aby se něco spustilo za 5 minut, ale zbytek vašeho programu pokračoval (nebo skončil), musíte také nastavit režim spánku:
#!/bin/bash
runWithDelay () {
sleep $1;
shift;
"${@}";
}
runWithDelay 3 echo world &
echo hello
Tím se vytiskne hello
a poté o 3 sekundy později (po ukončení hlavního programu) vytiskněte world
.
Důležitou součástí je &
pro rozvětvení provádění funkce na pozadí.