abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 08:11 | Komunita

    Firma X zaslala předžalobní výzvu vývojáři projektu Nitter (Wikipedia), open-source alternativního frontendu k sociální síti X (ex-Twitter), a provozovatelům instancí jako XCancel, které umožňovaly číst příspěvky bez přihlášení, reklam a javascriptu. Údajně se dopouštějí „sběru dat“. Zdrojový kód Nitteru vývojář archivoval. Vývoj již dříve přerušil v roce 2024 po tehdejším omezení API X. X je dceřiná společnost SpaceXAI Elona Muska, provozující mj. kontroverzního chatbota Grok.

    |🇵🇸 | Komentářů: 12
    dnes 02:22 | Nová verze

    Bylo vydáno Ubuntu 26.04.1 LTS, tj. první opravné vydání Ubuntu 26.04 LTS s kódovým názvem Resolute Raccoon. Přehled novinek a oprav na Discourse.

    Ladislav Hagara | Komentářů: 0
    dnes 02:11 | Zajímavý článek

    Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) vydal Zprávu o stavu kybernetické bezpečnosti ČR za rok 2025 (pdf). Incidentů ubylo, sofistikovanost útočníků roste.

    Ladislav Hagara | Komentářů: 0
    dnes 00:55 | Nová verze

    Open source softwarový stack AMD ROCm (Wikipedie) pro vývoj AI a HPC na GPU od AMD byl vydán v nové major verzi 10.0. S ROCm.AI. Přehled novinek v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 0
    včera 22:11 | Bezpečnostní upozornění

    Finanční skupina Partners se stala minulou neděli obětí kybernetického útoku, při kterém se útočníci dostali k některým osobním údajům klientů. Společnost o tom informovala ve čtvrtek. Ujišťuje, že peníze klientů nejsou v ohrožení. „Kybernetický útok zasáhl část IT infrastruktury naší společnosti. Ihned po zjištění útoku jsme s pomocí externích bezpečnostních odborníků začali intenzivně pracovat na minimalizaci škod. Útočníci se

    … více »
    Ladislav Hagara | Komentářů: 0
    včera 03:55 | IT novinky

    Americká technologická společnost Meta Platforms se dohodla, že zaplatí až zhruba 18 miliard dolarů (asi 373 miliard Kč) za mimosoudní urovnání sporu o závislosti dětí na sociálních sítích a provede významné změny pro jejich používání mladistvými. Téměř tři desítky států USA firmu v roce 2023 obvinily z toho, že sítě Facebook a Instagram vědomě navrhla tak, aby u dětí vyvolávaly závislost, a zatajovala tyto dopady před veřejností. Firma se

    … více »
    Ladislav Hagara | Komentářů: 3
    včera 02:55 | Komunita

    Byl publikován aktuální přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Blíží se vydání podporující čipy M3. Vývojáře lze podpořit na GitHub Sponsors a Open Collective.

    Ladislav Hagara | Komentářů: 0
    26.8. 16:55 | Nová verze

    Kancelářský balík LibreOffice byl vydán ve verzi 26.8. Mimo jiné vylepšuje typografii a kompatibilitu s formáty MS Office, více v poznámkách k vydání.

    |🇵🇸 | Komentářů: 0
    26.8. 14:55 | Nová verze

    Armbian, tj. linuxová distribuce založená na Debianu a Ubuntu optimalizovaná pro jednodeskové počítače na platformě ARM a RISC-V, ke stažení ale také pro Intel a AMD, byl vydán ve verzi 26.8. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 7
    26.8. 11:44 | Nová verze

    Byla vydána nová verze 23.1.0, tj. první stabilní verze z nové řady 23.1.x, překladačové infrastruktury LLVM (Wikipedie). Přehled novinek v poznámkách k vydání: LLVM, Clang, LLD, Extra Clang Tools, Libc++, Polly a Flang.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (2%)
     (19%)
     (29%)
     (7%)
     (6%)
     (2%)
     (15%)
     (22%)
    Celkem 2505 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Unixové nástroje – 12 (at, sleep, wait)

    11. 6. 2010 | David Watzke | Návody | 9704×

    V tomto díle seriálu si představíme tři příkazy související s plánováním pozdějšího spouštění jiných příkazů (at, sleep, wait).

    Obsah

    at

    link

    Příkaz at slouží k naplánování pozdějšího spuštění příkazů. Anglický název příkazu v tomto kontextu překládáme jako předložku „v“ (ve významu v kolik hodin).

    Implementace v Unix-like systémech obvykle sestává ze služby (démona) atd a uživatelského příkazu at. Služba běží neustále a spouští naplánované úlohy, když přijde čas. Tím se uživatel nemusí zabývat. Podstatné je pro nás, jak to naplánovat. Proto si popíšeme použití příkazu at.

    Ve výchozím režimu čte at seznam příkazů, které má spustit, ze standardního vstupu (stdin) a jako argument očekává čas, kdy je má spustit. Chceme-li tedy spustit příkaz pokus přesně za hodinu, můžeme to naplánovat takto:

    echo pokus | at now + 1 hour

    Tím jsme si ukázali, že čas spuštění lze zadávat i relativně. Zadávání času spuštění je velice obecné a když si vymyslíte něco, co dává aspoň trochu smysl, at to pravděpodobně pochopí.

    # spustí ,echo $USER >> /tmp/users‘ zítra v 18:00
    echo 'echo $USER >> /tmp/users' | at 1800 tomorrow
    
    # spustí ,paludis -s‘ v 17:00 (pokud tento čas ještě nenastal, tak dnes, jinak zítra)
    echo 'paludis -s' | at 17:00
    
    # spustí zadané příkazy 20. července v 17:00
    at 5pm jul 20 <<!
    updatedb
    sync
    !
    

    Přepínač -f umožňuje zadat cestu k souboru obsahujícímu seznam příkazů, jejichž spuštění má at naplánovat. Místo standardního vstupu se tedy čte z daného souboru.

    # spustí příkazy ze souboru za týden v tento čas
    at -f soubor.at next week
    

    Přepínač -m zajistí odeslání e-mailu danému uživateli po dokončení jeho příkazů. Pokud výstup příkazů nebyl přesměrován jinam, bude přiložen v e-mailu.

    Nyní bych se měl zmínit o frontách a manipulaci s nimi. Všechna dosavadní ukázková volání příkazu at přidávají příkazy do výchozí fronty (zvané „a“). Chceme-li vypsat seznam položek ve frontě, použijeme přepínač -l (a chceme-li vypsat jinou frontu než výchozí, tak ještě -q).

    # přidá daný příkaz do fronty „x“
    echo lsmod | at -m -q x now + 1 minute
    
    # vypíše položky všech front
    at -l
    
    # vypíše položky fronty zvané „x“
    at -l -q x
    

    Další věc je odebírání položek z fronty. Když se spleteme a naplánujeme nesmysl nebo si časem rozmyslíme spouštění dané věci, tak se bude hodit přepínač -r. Problém je, že verze at, která je obvykle k nalezení na linuxových systémech, se zde trochu rozchází se standardem Single UNIX Specification a žádný přepínač -r nemá. Používáme proto příkaz atrm, kterému zadáme ID položek, jež chceme z fronty smazat. ID položek zjistíme výše zmiňovaným příkazem at -l (příp. nestandardně pomocí atq).

    # smaže z fronty položky s ID 10, 12 a 15
    atrm 10 12 15
    

    Mimochodem, Windows NT/2000/XP/7 mají také příkaz at (podobný cronu), ten je ovšem zastaralý – nahradil jej schtasks (resp. GUI nadstavba Task Scheduler).

    sleep

    link

    Program sleep nedělá nic (čeká) po uživatelem danou dobu. Název vychází z anglického slova, které v překladu znamená „spát“.

    Nezasvěcenému uživateli se takový popis může zdát zvláštní a řekne si: „K čemu je příkaz, který nic nedělá?“ Představte si kupříkladu situaci, kdy je třeba spouštět nějaký příkaz každých 10 minut. Vyřešit to lze takto:

    while true; do
    	příkaz
    	sleep 600 # čas v sekundách
    done
    

    Chceme-li třeba za 15 sekund ukončit proces X serveru (to se někdy hodí při řešení problémů se vstupními zařízeními), můžeme také použít sleep:

    # za 15 sekund pošle signál SIGKILL všem běžícím instancím X serveru
    sleep 15 ; killall -9 X
    

    Tolik k praktickému využití. Ještě by se slušelo zmínit, že verze programu sleep, se kterou se setkáte, se může (a pravděpodobně bude) lišit od té standardní (dle SUS). Standard totiž říká, že program by měl pracovat s jedním celočíselným nezáporným argumentem, který udává, kolik sekund se má čekat. Jenže třeba sleep z GNU coreutils podporuje i zadávání minut, hodin a dnů (připojením písmene „m“, „h“ nebo „d“ za číslo). Další odlišností této verze je možnost zadat desetinné číslo.

    # spí 1 den, 5 hodin, 2 minuty, 10 sekund, 200 milisekund
    sleep 1d 5h 2m 10.2s
    
    # spí 6 sekund a 300 milisekund
    sleep 0.1m 0.3s
    

    wait

    link

    Příkaz wait čeká, dokud se neukončí proces s daným PID běžící na pozadí daného shellu a poté se sám ukončí. Název programu je opět anglické slovo, která znamená „čekat“.

    Jak jsem naznačil, wait umí čekat pouze na procesy spuštěné na pozadí shellu, ze kterého wait spouštíme. Předvedeme si spuštění programu na pozadí:

    sleep 100 &

    Představte si, že jsme místo programu sleep spustili na pozadí něco smysluplného. Teď když spustíme wait bez argumentů, tak bude čekat na ukončení všech procesů běžících na pozadí shellu. Když jako argumenty zadáme jednotlivé PID, bude se čekat pouze na jim odpovídající procesy. Pokud proces s daným PID neexistuje, wait by se měl chovat jako kdyby proces existoval a okamžitě vracel návratovou hodnotu 127. Návratová hodnota programu je obecně ta, kterou vrátí proces, jehož PID je uvedeno jako poslední v seznamu argumentů. Je-li spuštěn bez argumentů, vrací 0.

    V Bashi se PID posledního procesu spuštěného na pozadí shellu uchovává v proměnné $!, takže lze provést následující:

    lame --decode nejaka.mp3 nejaky.wav &> /dev/null &
    echo -n "Převádím MP3 na WAV… "
    wait $! && echo "OK" || echo 'chyba!'
    

    V praxi se tento příkaz používá převážně neinteraktivně, tedy ve skriptech.

           

    Hodnocení: 100 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    11.6.2010 08:02 kkaarreell | skóre: 6 | blog: perkele
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    Nepodarilo se mi dohledat, jak si prohlednu prikazy ve fronte. "at -q" dava jen casy a id. Nevi nekdo?
    11.6.2010 08:47 pepazdepa
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    taky nevim, lezu do /var/spool/ (pak to zalezi na systemu) a najdu si slozku atjobs a v tom ten job, je to tam jako textak :)
    11.6.2010 09:21 Vtipnéř | skóre: 39 | blog: Vtipnéřův blog | Brno
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    at -c ID. Příkazy jsou až na konci výpisu, takže můžeme přidat ještě | tail.

    Ještě bych doplnil na další možnost zadávání příkazů pro spuštění pomocí at: napíšeme jen at nějaký_čas, po odeslání Enterem se objeví prompt at>, kam zadáváme jednotlivé příkazy a zadávání ukončíme stiskem CTRL+D. Ale nevím, jestli je to odpovídá standardu.

    Jirka
    Opening Windows is better than washing them. Clearing Windows (e.g. erasing or deleting) is even much better.
    Josef Kufner avatar 11.6.2010 11:14 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    To je úplně totéž jako to popsané v článku.
    Hello world ! Segmentation fault (core dumped)
    jose17 avatar 11.6.2010 09:02 jose17 | skóre: 44 | blog: Joseho_blog | Bratislava
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    rychlejsie je pisat while sleep x; do ...; done
    Ja vim, on vi, ty nano!
    11.6.2010 09:38 pepazdepa
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    ty jsi ale chytrak. omg
    Josef Kufner avatar 11.6.2010 11:16 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    Lépe se to chová při zabití toho sleep – skončí to. Příklad v článku okamžitě provede příkaz znovu a zas čeká, takže je trošku těžší to zabít.
    Hello world ! Segmentation fault (core dumped)
    David Watzke avatar 11.6.2010 12:40 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    Moje zkušenost je taková, že zabít je to stejně snadné, právě kvůli while true. Kdyby tam byl nekonečný for, tedy for((;;)), tak by to bylo o něčem jiném.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    Josef Kufner avatar 11.6.2010 16:25 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    while true je méně nekonečné?
    Hello world ! Segmentation fault (core dumped)
    David Watzke avatar 11.6.2010 16:48 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    Ne, ale chová se to jinak, když to chceš ukončit. Ostatně si to můžeš přece zkusit.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    Josef Kufner avatar 11.6.2010 17:03 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    Jinak? U mě obojí dělá úplně totéž. Včetně reakce na ctrl+c a killall sleep.
    Hello world ! Segmentation fault (core dumped)
    David Watzke avatar 11.6.2010 17:30 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    Máš pravdu, tak to sorry. Ale jsem si docela jistej, že někdy dřív se to jinak chovalo, protože ukončit cyklus for((;;)) občas nebyla sranda a musel jsem držet ctrl+c, zatímco u while true to stačilo jen zmáčknout.

    Teď sem si i uvědomil že jsem reagoval docela zcestně na tvůj původní komentář, takže si mě radši nevšímej :-D
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    David Watzke avatar 11.6.2010 12:39 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    To tvoje nejdřív spí a potom spustí příkaz, moje naopak.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    11.6.2010 10:12 tonda
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    lame --decode nejaka.mp3 nejaky.wav &> /dev/null &
    echo -n "Převádím MP3 na WAV… "
    wait $! && echo "OK" || echo 'chyba!'
    tohle je blbost $! vrati pid prikazu echo ....

    spravne melo byt
    lame --decode nejaka.mp3 nejaky.wav &> /dev/null &
    PID=$!
    ...
    echo -n "Převádím MP3 na WAV… "
    wait $PID && echo "OK" || echo 'chyba!'
    11.6.2010 10:25 Keson
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    No, zase až taková blbost to nebyla.

    $! obsahuje ID procesu, který byl naposledy spuštěn na pozadí (tedy s &).
    11.6.2010 10:47 psx
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    Ale to se pletete. $! nevrati pid prikazu echo, ale pid posledniho prikazu spusteneho na pozadi a to echo na pozadi spusteno nebylo. Puvodni priklad je spravne.
    Josef Kufner avatar 11.6.2010 11:19 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    No, stejnak v tomhle případě je lepší udělat:
    echo -n Převádím...
    lame ... >/dev/null && echo hotovo || echo chyba
    Tedy alespoň pokud není třeba dělat mezitím něco dalšího.
    Hello world ! Segmentation fault (core dumped)
    David Watzke avatar 11.6.2010 12:38 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    To je pravda. Měl jsem tam naznačit provádění něčeho mezitím, protože tak to bylo míněno.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    D.A.Tiger avatar 11.6.2010 13:12 D.A.Tiger | skóre: 8 | Brno
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    Např. vypnutí systému.

    V některých případech (většinou když se zpracovává velké množství dat) je lepší spustit skript v době kdy s komplem nic neděláte(třeba přes noc). Skript by po dokončení požadované operace (nebo nějaké závažné chybě) zapsal log a automaticky ukončil systém...
    Radost z toho, že někdo objeví něco nového, je omyl starý 6000 let... (Jean Paul) | anthill inside
    11.6.2010 12:58 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    Nepsal bych
    wait $! && echo "OK" || echo 'chyba!'
    protože to je
    wait $! && (echo "OK" || echo 'chyba!')
    nikoliv "klasické" if then else
    wait $! && (echo "OK") || (echo 'chyba!')
    
    takže teoreticky pokud selže echo OK, objeví se "chyba!", ovšem nikoliv chyba v převodu mp3, ale chyba ve výpisu na obrazovku, což nemusí být to, co autor zamýšlel. V praxi echo OK většinou neselže, ale nepřipadá mi vhodné to takto psát...
    David Watzke avatar 11.6.2010 13:04 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    O tomhle vím, ale jednoduše jsem to neřešil. Ale neuškodí to zmínit, tak dík.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    11.6.2010 19:44 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    Problém je, že verze at, která je obvykle k nalezení na linuxových systémech, se zde trochu rozchází se standardem Single UNIX Specification a žádný přepínač -r nemá.

    Až tak obvyklé to nebude - v SuSE ho podporuje, v Red Hatu ho podporuje, ve Slackware IIRC taky (nebo aspoň podporovala, když jsem ho používal). Vlastně si nevzpomínám na žádnou konkrétní distribuci, kde by defaultní implementace at přepínač -r nepodporovala.

    11.6.2010 19:48 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    Např. Gentoo, at v3.1.10.2 (aktuální stable verze v repo).
    David Watzke avatar 11.6.2010 20:16 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    A Gentoo podle všeho používá verzi z Debianu, což mě vedlo k tomu napsat to, co jsem napsal.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    11.6.2010 23:34 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    v ubuntu ho též nemám.
    Baník pyčo!
    David Watzke avatar 12.6.2010 11:34 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Unixové nástroje – 12 (at, sleep, wait)
    To je velký překvapení :-)
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.