Meg tudná valaki mutatni nekem, hogyan kell programot készíteni ennek a műveletnek az elvégzéséhez: 5 perc elteltével
echo "80" > /sys/class/leds/blue/brightness
Azt akarom, hogy ez a program a háttérben fusson (például rngd
szolgáltatás). Ezt nem tudom megtenni, mert nem tudok annyira a Linuxról.
Válasz
( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &
Így folytatódik a szkript, vagy azonnal visszaállítja a vezérlést, miközben egy új háttérfeladata két paranccsal indul: sleep és echo.
A gyakori hiba vagy sleep
, vagy pedig echo
vagy mind a &
, amelyek nem fognak megfelelően működni. Parancsok sorozatának elindítása a ()
fájlban, bár külön héjfolyamatban hozza létre őket, amelyeket aztán egészben háttérbe küldhet a &
<. / p>
Erre az észre, ahol aktívan hasznosnak találtam. Egy beágyazott eszközben ott fejlesztem ki azt a fő alkalmazást, amely egy őrzőkutyával működik. Ha nem sikerül olyan módon, amely az indítás után hamarosan újraindítja a megfigyelő alaphelyzetbe állítását, akkor az operációs rendszer kezdete és a visszaállítás meglehetősen rövid, nem elegendő az ssh bejutásához és az alkalmazás indításának blokkolásához. Szükségem van tehát egy módszerre, amellyel megállapíthatom, hogy a rendszer ilyen gyorsan újraindul, és ha igen, akkor késleltetést kell bevezetnem, hogy időt hagyjak magamnak a kézi javításra.
[ -f /tmp/startdelay ] && sleep 30 touch /tmp/startdelay ( sleep 30 ; rm /tmp/startdelay ) & [ -f /tmp/noautostart ] && exit 0 start_app
Ha jelentkezzen be és hajtsa végre touch /tmp/noautostart
a fő alkalmazás nem indul el. Ha az őrző beindul, rm /tmp/startdelay
nem fog végrehajtani, és a következő a rendszer beindulásakor további 30-at kapok, hogy leállítsam. Ellenkező esetben az újraindítás gyors és késedelem nélküli lesz.
Megjegyzések
Válasz
használja a at
parancsot
echo "echo \"80\" > /sys/class/leds/blue/brightness" | at now + 5 min
amely a háttérben futni fog
Megjegyzések
- Ez a helyes módszer erre , de futnia kell az atd démonnak, és a legtöbb rendszerben telepítenie kell egy csomagot.
- Használhat egyetlen idézőjelet a szökés elkerülése érdekében, és elhagyhatja a
echo
teljes egészében heredoc vagy herestring használatával. - @Julian,
at
egy szabványos POSIX parancs. Milyen Unix-szerű rendszer nem érhető el alapértelmezés szerint '? - @St é phaneChazelas – jó kérdés . tudom, hogy ' volt ilyen problémám, de egy ideje ez volt. Végeztem egy kis ellenőrzést, és az at parancs eléggé mindenütt megjelenőnek tűnik. Úgy tűnik, hogy az atd Linux-specifikus, és egyes Linux-rendszereken még egy BSD stílusú cron démon is helyettesíthető. A ' s véleményem elavultnak tekinthető.
- Megpróbáltam a ' címet a ' és nem található parancs az Android 8-on
Válasz
Ha azt akarja, hogy valami futjon 5 alatt percig, de a program többi részének folytatásához (vagy befejezéséhez) az alvást is háttérbe kell állítania:
#!/bin/bash runWithDelay () { sleep $1; shift; "${@}"; } runWithDelay 3 echo world & echo hello
Ez kinyomtatja a hello
, majd 3 másodperccel később (miután a fő program kilép) nyomtassa ki az world
szót.
A fontos rész a &
a függvény végrehajtásának háttérbe szorításához.
megjegyzések
- javasolhatok helyette
runWithDelay () { sleep $1; "${@:2}"; }
? - szerintem a második példádban olvassa el az
doWhateverWithDelay 3 &
elemet. - @manatwork: Cheers.
- @goldilocks, a az, hogy idézheted, és kibővül idézett szavak listájaként. Tehát jobb, ha elkészíted
"$@"
(vagy"${@}"
, ha tetszik a fogszabályozó).Lásd: pastebin.com/MU7hbB2C - @manatwork: Elvett pont;) Megpróbáltam, hogy argokat használok echo-val (
-n
), de nyilván ez kissé naiv volt.
&
gombbal állítsa be az alvást; " be kell állítanod az alvást is, és " a kezdetektől fogva az első sorban volt. Ha nem hisz nekem ', nézze meg a szerkesztési előzményeket. És a válaszom 5 perccel idősebb, mint a tiéd: P()
csoportot, az eredeti héj szünetel, amíg az ívott nem fejeződik be.)