Kuinka komento suoritetaan taustalla viiveellä?

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 taustatehtävä alkaa kahdella komennolla: sleep ja echo.

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

  • Kyllä, olen samaa mieltä, mutta se voi myös olla osa käyttäjän pohdintaa; -)
  • Muut vastaukset näyttävät puuttuvan " -taustaa taustalla ". Ei, minä oli siitä melko selvä: /
  • @goldilocks: Lisäsit lähetyksen taustaosaan vasta, kun lähetin vastaukseni.
  • Ei, alkuperäinen vastaukseni oli suorittaa unia sisältävä toiminto & -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
  • @gekannt: … uh, kysymys on " Kuinka komento suoritetaan tausta viiveellä? " – miten saavutat sen muuten? (ja ei, jos et ' tausta () -ryhmää, alkuperäinen kuori keskeytyy, kunnes kutu on valmis.)

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.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *