Název školy: | Vyšší odborná škola a Střední průmyslová škola, Božetěchova 3 |
Autor: | Ing. Marek Nožka |
Anotace: | Správa sezení a plánované spouštění procesů |
Vzdělávací oblast: | Informační a komunikační technologie |
Předmět: | Počítačové sítě a komunikační technika (PSK) |
Tematická oblast: | Operační systém Linux/Unix |
Výsledky vzdělávání: | Žák naplánuje spouštění programu na určený čas, ovládá program screen |
Klíčová slova: | Linux, Unix, shell, at, cron, screen |
Druh učebního materiálu: | Online vzdělávací materiál |
Typ vzdělávání: | Střední vzdělávání, 4. ročník, technické lyceum |
Ověřeno: | VOŠ a SPŠE Olomouc; Třída: 4L |
Zdroj: | Vlastní poznámky, Vilém Vychodil: Linux Příručka českého uživatele |
Každý proces je vytvořen jako potomek svého rodiče. Procesy jsou na sobě
závislé a tvoří skupiny. Například program
man
běží v shellu a zároveň
používá program less
. V následujícím příkladu vidíme
ve sloupci PPID
PID rodičovského procesu a ve sloupci PGRP
PID vedoucího skupiny.
Jestli-že bude z jakéhokoliv důvodu rodičovský proces ukončen, budou s ním ukončeni i všichni jeho potomci.
$ ps -u marek --forest -o tty,pid,ppid,pgrp,comm
TT PID PPID PGRP COMMAND
tty2 27603 2941 27603 zsh
tty2 27737 27603 27737 \_ ps
tty1 27562 2940 27562 zsh
tty1 27577 27562 27577 \_ man
tty1 27588 27577 27577 \_ less
Pokud požadujeme, aby byl proces nezávislý na svém rodiči a aby byl sám
vedoucím skupiny spustíme ho na pozadí (pomocí metaznaku &
) nebo použijeme
program nohup
.
$ zalohujDATA &
$ exit
.....
..... na jiném terminálu
$ ps -u marek --forest -o tty,pid,ppid,pgrp,comm
TT PID PPID PGRP COMMAND
tty2 27603 2941 27603 zsh
tty2 27737 27603 27737 \_ ps
tty1 27562 2940 27562 zsh
tty1 27577 27562 27577 \_ man
tty1 27588 27577 27577 \_ less
? 27941 1 27941 zalohujDATA
Nyní se může uživatel odhlásit a program zalohujDATA
poběží dál.
V operačním systému Unix lze spuštění procesu naplánovat. K jednorázovému naplánování spuštění procesů slouží systémová služba atd. Uživatelský obslužný program se jmenuje at
Syntaxe programu at
může obecně vypadat takto
at ČAS DATUM + PŘÍRŮSTEK
midnight
, noon
, teatime
(4pm).
Sun
,Mon
, Tue
, Wed
, Thu
, Fri
, Sat
)
minutes
, hours
, days
, weeks
, months
, years
at 9:45 26.3.2056 |
26. března 2056 |
at tomorrow + 1 hours |
zítra o hodinu později |
now + 2 weeks |
za dva týdny |
13:10 + 20 minutes |
ve 13:30 |
Například:
$ at now + 20 minute
warning: commands will be executed using /bin/sh
at> du -sh ~
at> df -h /home
at> ^D (zadávání ukončím pomocí Ctrl+D)
job 12 at Wed Nov 27 11:33:00 2013
V 11:33 se úloha spustí. A vypíše se (du) místo,
které na disku zaujímá můj domovský adresář a (df)
obsazené místo na svazku /home
.
V předchozí odstavci bylo použito sloveso vypíše se. Zbývá ale vyřešit problém kam se vypíše. Uživatel může být přihlášen několikrát, nebo nemusí být přihlášen vůbec. Standardní výstup naplánované úlohy se proto zašle do e-mailové schránky uživatele. Automaticky se předpokládá, že uživatel má na sytému lokální e-mailovou schránku nebo že je mu lokální pošta přeposílána.
Systémová služba Cron slouží k opakovanému spouštění procesů vždy ve stanovený čas.
Časy spouštění programů se zapisují do tabulky:
# * * * * * command to execute
# ┬ ┬ ┬ ┬ ┬
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ └───── den v týdnu (0 - 7) (0 i 7 je neděle)
# │ │ │ └────────── měsíc (1 - 12)
# │ │ └─────────────── den v měsíci (1 - 31)
# │ └──────────────────── hodina (0 - 23)
# └───────────────────────── minuta (0 - 59)
Například:
* * * * * command |
spustí příkaz každou minutu |
15 0 * * 1 command |
spustí příkaz vždy v pondělí 15 minut po půlnoci |
40 8,9,10 * * * command |
spustí příkaz 3x denně: 8:40, 9:40, 10:40 |
40 8-10 * * * command |
spustí příkaz 3x denně: 8:40, 9:40, 10:40 |
*/20 * * * * command |
příkaz se spustí každých 20 minut |
30 15 5,10,15,20,25,30 * * |
každý 5., 10., 15., 20., 25. a 30. den v měsíci vždy v 15:30 |
30 15 5-31/5 * * |
každý 5., 10., 15., 20., 25. a 30. den v měsíci vždy v 15:30 |
Uživateli slouží pro obsluhu program crontab
s následujícími parametry
-l |
vypíše tabulku |
-r |
vymaže tabulku |
-e |
edituje tabulku v textovém editoru, uživatel nastavuje editor v proměnně prostředí EDITOR |
$ echo $EDITOR
vim
$ EDITOR=mcedit
$ echo $EDITOR
mcedit
$ crontab -e
Existují speciální programy, které jsou označovány jako terminal multiplexer. Jejich zástupcem může být oblíbený program GNU Screen.
Umožňuje uživatelům přistupovat k několika terminálovým sezením uvnitř jediného okna terminálu či vzdáleného terminálového sezení. To je užitečné pro práci s více programy z příkazové řádky a pro oddělení programů od unixového shellu, který program spustil.
Dá se říci, že se jedná o textovou verzi správce oken nebo o umístění virtuálních terminálů do libovolného přihlášeného sezení. Je to obal, který umožňuje běh několika textových programů zároveň a dovoluje uživateli efektivně používat programy v jediném rozhraní.
Program také umožňuje nechat běžet několik interaktivních programů a přitom nebýt přihlášen. Nebo programy spustit, odhlásit se, potom se opět přihlásit a pokračovat v rozdělané práci.
Program spustíme příkazem
$ screen
Po úvodní obrazovce se spustí uživatelský shell a program screen
není na
první pohled vidět. Všechny klávesové zkratky a začínají kombinací Ctrl+A
a
za ním následuje stisk další klávesy (nebo kombinace).
Ctrl+A ?
Ctrl+A C
Ctrl+A N
Ctrl+A P
Ctrl+A Ctrl+A
Ctrl+A "
Ctrl+A Shift+A
Ctrl+A 0
či Ctrl+A 1
či Ctrl+A 2
či ...0
či 1
či 2
atd.
Ctrl+A Shift+S
Ctrl+A |
Ctrl+A X
Ctrl+A TAB
Ctrl+A [
či Ctrl+A Ctrl+[
či Ctrl+A ESC
jhkl
, PageUp
, PageDown
atd. Stiskem mezerníku
můžeme označovat
text. Označení textu se ukončí opět mezerníkem
. Text je uložen ve schránce.
Tento mód lze ukončit i bez nezenrníku pomocí ESC
.
Ctrl+A ]
Ctrl+A d
screen -r
.
$ screen -r
Screen není jediným zástupcem svého druhu. Já mám například rád program tmux: http://www.root.cz/clanky/okna-v-terminalu-pomoci-tmux/.