Voiko joku näyttää minulle, miten ohjelma tehdään tämän toiminnon suorittamiseksi: 5 minuutin kuluttua
echo "80" > /sys/class/leds/blue/brightness
Haluan, että tämä ohjelma suoritetaan taustalla (kuten rngd
palvelu). En voi tehdä tätä, koska en tiedä niin paljon Linuxista.
vastaus
( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &
Tällä tavoin komentosarjasi jatkuu tai palautat hallinnan heti, kun uusi
Yleinen virhe yrittää antaa joko sleep
tai echo
tai molemmat &
, jotka eivät toimi tarkoitetulla tavalla. Käynnistämällä komentosarjan ()
-sarjasta syntyy ne erillisessä kuoriprosessissa, jonka voit sitten lähettää kokonaisuudessaan taustalle &
.
Siihen, minusta se oli aktiivisesti hyödyllinen. Upotetussa laitteessa kehitän siellä pääsovelluksen, joka toimii vahtikoiran kanssa. Jos se epäonnistuu tavalla, joka käynnistää vahtikoiran nollaus pian käynnistyksen jälkeen, toistuvasti, sitä on vaikea korjata etänä käyttöjärjestelmän käynnistymisen ja nollaus on melko lyhyt, ei riitä ssh: n sisään ja estämään sovelluksen käynnistyksen. Tarvitsen tavan selvittää järjestelmän uudelleenkäynnistys niin nopeasti ja ottaa käyttöön viive, jos se tapahtui, antaa itselleni aikaa korjata se manuaalisesti.
[ -f /tmp/startdelay ] && sleep 30 touch /tmp/startdelay ( sleep 30 ; rm /tmp/startdelay ) & [ -f /tmp/noautostart ] && exit 0 start_app
Jos kirjaudu sisään ja suorita touch /tmp/noautostart
pääsovellus ei käynnisty. Jos vahtikoira käynnistyy, rm /tmp/startdelay
ei suoriteta ja seuraava kun järjestelmä käynnistyy, se antaa minulle 30 ylimääräistä aikaa pysäyttää se. Muuten uudelleenkäynnistys on nopeaa ja viipymättä.
Kommentit
Vastaa
käytä komentoa at
echo "echo \"80\" > /sys/class/leds/blue/brightness" | at now + 5 min
joka toimii taustalla
Kommentit
- Tämä on oikea tapa tehdä se , mutta se vaatii, että atd-daemon on käynnissä, ja useimmissa järjestelmissä on oltava paketti asennettuna.
- Voit välttää pakenemisen käyttämällä yksittäisiä lainausmerkkejä ja hylätä
echo
kokonaan käyttämällä heredokkia tai herestringiä. - @Julian,
at
on vakio POSIX-komento. Millä Unixin kaltaisella järjestelmällä ei ' ole sitä oletusarvoisesti käytettävissä? - @St é phaneChazelas – hyvä kysymys . tiedän, että minulla ' on ollut tämä ongelma, mutta se oli jonkin aikaa sitten. Tein vähän tarkistusta ja komento näyttää melko läsnä. Vaikuttaa myös siltä, että atd on Linux-spesifinen, ja jopa joissakin Linux-järjestelmissä se voidaan korvata BSD-tyylisellä cron-demonilla. Olkoon ' katsottava kommenttini vanhentuneeksi.
- Yritin ' osoitteessa ' eikä Android 8: sta löytynyt komentoa
Vastaa
Jos haluat, että jokin suoritetaan 5: ssä minuuttia, mutta loput ohjelmasta jatkaaksesi (tai lopettaaksesi), sinun on myös taustoitettava lepotila:
#!/bin/bash runWithDelay () { sleep $1; shift; "${@}"; } runWithDelay 3 echo world & echo hello
Tämä tulostaa hello
ja sitten 3 sekuntia myöhemmin (kun pääohjelma on poistunut), tulosta world
.
Tärkeä osa on &
haarauttaa toiminnon suorittamisen taustalle.
kommentit
- Voinko ehdottaa sen sijaan
runWithDelay () { sleep $1; "${@:2}"; }
? - Mielestäni se pitäisi lukea
doWhateverWithDelay 3 &
toisessa esimerkissäsi. - @manatwork: Kippis.
- @goldilocks, olennaista on, että voit lainata sitä ja se laajennetaan lainattujen sanojen luettelona. Joten tee se paremmin
"$@"
(tai"${@}"
, jos pidät aaltosulkeista).Katso pastebin.com/MU7hbB2C - @manatwork: Piste otettu;) Yritin yrittää käyttää argeja echon kanssa (
-n
), mutta se oli tietysti hieman naiivi.
&
-näppäimen kanssa taustalla uni; " sinun on myös taustoitettava uni. " oli ensimmäisellä rivillä alusta alkaen. Jos et ' usko minua, katso muokkaushistoriaa. Ja vastaukseni on 5 minuuttia vanhempi kuin sinun: P()
-ryhmää, alkuperäinen kuori keskeytyy, kunnes kutu on valmis.)