Hogyan futtassunk egy parancsot a háttérben késéssel?

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

  • Igen, egyetértek, de ez is része lehet a felhasználó elmélkedésének; -)
  • Úgy tűnik, hogy más válaszokból hiányzik a " a " részben. Nem, én elég egyértelmű volt ebben: /
  • @goldilocks: Csak azután adta hozzá az elküldést a háttérrészhez, hogy elküldtem a válaszomat.
  • Nem, az eredeti válaszom az volt, hogy egy alvást tartalmazó funkciót futtassak. az & 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
  • @gekannt: … uh, a kérdés " Hogyan futtassunk egy parancsot a háttér késéssel? " – másképp hogyan érné el? (és nem, ha nem ' nem állítja be a () csoportot, az eredeti héj szünetel, amíg az ívott nem fejeződik be.)

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

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük