Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| skoleni:sprava_uzivatelu_a_sluzeb [2019/04/21 08:54] – [Monitorovanie procesov] pridanie pokrocilych nastrojov ako htop, glances a pod. eskultety | skoleni:sprava_uzivatelu_a_sluzeb [2022/11/14 11:26] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
|---|---|---|---|
| Řádek 891: | Řádek 891: | ||
| * '' | * '' | ||
| * **VIRT** - //virtual memory space (process block)// | * **VIRT** - //virtual memory space (process block)// | ||
| - | * Veškerá pamäť, ktorú má process k dispozícii (zásobník, | + | * Všetka pamäť, ktorú má process k dispozícii (zásobník, |
| * **RES/RSS** - //resident set size// | * **RES/RSS** - //resident set size// | ||
| * Časť (podmnožina) VIRT, ktorá je načítaná v RAM | * Časť (podmnožina) VIRT, ktorá je načítaná v RAM | ||
| * Zvyšok može byť na disku (//swap//) alebo SHR patriace inému procesu. | * Zvyšok može byť na disku (//swap//) alebo SHR patriace inému procesu. | ||
| * **SHR** - //shared memory// | * **SHR** - //shared memory// | ||
| - | * Časť, ktorá patrí tomuto procesu a je zároveň | + | * Časť, ktorá patrí tomuto procesu a je zároveň |
| * **%MEM** | * **%MEM** | ||
| * Koľko percent z celkovej dostupnej pamäte proces používa (RES / RAM) | * Koľko percent z celkovej dostupnej pamäte proces používa (RES / RAM) | ||
| Řádek 937: | Řádek 937: | ||
| $ | $ | ||
| </ | </ | ||
| + | |||
| + | === Manuálové stránky === | ||
| + | * '' | ||
| + | * '' | ||
| ====Pokročilé nástroje monitorovania==== | ====Pokročilé nástroje monitorovania==== | ||
| Řádek 953: | Řádek 957: | ||
| * rozšírenie '' | * rozšírenie '' | ||
| * '' | * '' | ||
| - | * komplexný monitoring v rozhraní ncurses, jednotlivé aspekty systému sa dajú vypínať a zapínať podľa potreby, výstup | + | * komplexný monitoring v rozhraní ncurses, jednotlivé aspekty systému sa dajú vypínať a zapínať podľa potreby, výstup |
| * '' | * '' | ||
| * v podstate '' | * v podstate '' | ||
| - | === Manuálové stránky | + | ==== Priorita a " |
| - | * '' | + | V predchádzajúcich sekciách boli spomenuté termíny ako // |
| - | * '' | + | |
| - | * '' | + | |
| - | ==== Pokročilé nastavenia ==== | + | === Plánovanie procesov |
| + | Plánovanie je druh aktivity, ktorá nám dovoľuje multitasking, | ||
| - | === Priority | + | ===Priority=== |
| + | Linux rozoznáva 140 priorít v 2 rôznych rozsahoch | ||
| + | * [1,99] pre // | ||
| + | * pre // | ||
| + | * [100,139] - interval pre normálne (// | ||
| - | Vyššie ste mohli vidieť, že každý proces má svoju prioritu. Linux poskytuje 3 typy plánovačov | + | **Niceness |
| - | Okrem priorít, poskytujú | + | * hodnota v //user-space//, ktorá sa mapuje na skutočnú PR prioritu v kerneli, ktorá sa preloží do daného rozsahu [100,139] |
| + | * rozsah [-20,19] - čím menšie číslo, tým väčšia priorita procesu (štandardne však 0) | ||
| + | * NI slúži len ako váha pre plánovač, aby určil skutočnú prioritu PR | ||
| + | * na výpočet skutočnej priority sa používa vzťah: | ||
| + | < | ||
| - | * '' | + | My sa teraz zamierame na to, ako hodnoty |
| - | * Priorita vždy 0. | + | |
| - | * Použiva 40 tzv. //" | + | |
| - | * Cím //nižšia// hodnota (-20), tým // | + | |
| - | * Poskytuje 3 //triedy//: | + | |
| - | * **SCHED_OTHER** - úplne | + | |
| - | * **SCHED_IDLE** - bežia **iba** ak nie je žiadny ďalší process, ktorý by mohol | + | |
| - | * **SCHED_BATCH** - vhodný pre dávkové alebo dlho-počítajúce processy | + | |
| - | * '' | + | Spustime opäť |
| - | * Používa 99 priorít v rozsahu [1 .. 99]. | + | < |
| - | * Proces s //vyššou// prioritou je // | + | $ nice -5 dd if=/dev/zero of=/dev/null & |
| - | * Procesy s '' | + | $ top |
| - | | + | 5537 skoleni |
| - | * **SCHED_FIFO** | + | 1437 skoleni |
| - | * **SCHED_RR** - procesy sa striedajú podľa časového kvanta | + | ... |
| + | </ | ||
| - | * '' | + | Vidíme, že hoci sme spustili |
| - | | + | < |
| - | | + | $ stress |
| - | | + | $ top |
| + | 11361 skoleni | ||
| + | 11360 skoleni | ||
| + | 11362 skoleni | ||
| + | 11356 skoleni | ||
| + | 11354 skoleni | ||
| + | 11363 skoleni | ||
| + | 11358 skoleni | ||
| + | 5537 skoleni | ||
| + | 1437 skoleni | ||
| + | </ | ||
| - | //Pozn.:// Všimnite si, že '' | + | Stress test nám nám úspešne vyťažuje celý systém. Skúsme niektorým z procesov '' |
| - | Hodnoty //" | ||
| < | < | ||
| - | ]# renice -5 9629 | + | $ top |
| - | 9629 (process ID) old priority | + | PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND |
| - | + | 11360 skoleni | |
| - | ]# renice | + | 11361 skoleni |
| - | 9629 (process ID) old priority -5, new priority 19 | + | 11376 skoleni |
| + | 11363 skoleni | ||
| + | 11356 skoleni | ||
| </ | </ | ||
| - | //Pozn.:// Všimnite si, že je poreba superužívateľské práva. | + | Program '' |
| - | Plánovací algoritmus sa určuje podľa plánovacej triedy a spolu s prioritami sa nastavujú napíklad príkazom '' | ||
| < | < | ||
| - | ]# chrt --pid 9629 | + | $ renice |
| - | pid 9629's current scheduling policy: SCHED_OTHER | + | $ top |
| - | pid 9629's current scheduling priority: 0 | + | |
| - | ]# chrt --fifo --pid 99 9629 | + | PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND |
| - | + | 11361 skoleni | |
| - | ]# chrt --pid 9629 | + | 11376 skoleni |
| - | pid 9629's current scheduling policy: SCHED_FIFO | + | 11356 skoleni |
| - | pid 9629's current scheduling priority: 99 | + | 11363 skoleni |
| + | 11360 skoleni | ||
| </ | </ | ||
| - | Taktiež dokážeme | + | Čo ak by sme naopak chceli prioritu zvýšiť (napr. pre program |
| - | Táto vlastnosť sa najjednoduchšie nastavuje príkazom '' | + | |
| < | < | ||
| - | ]# taskset --pid --cpu-list 2,3 9629 | + | $ renice |
| - | pid 9629's current affinity list: 0-3 | + | renice: failed to set priority for 11376: Permission denied |
| - | pid 9629's new affinity list: 2,3 | + | </ |
| - | Teraz bude PID 9629 plánovaný iba na logických procesoroch 2 a 3 (CPU) | + | Vidíme, že na zvýšenie priority je potreba práva užívateľa **root**. Je to bezpečnostné opatrenie, aby si aplikácie samy nemohli prioritu zvyšovať a ochromiť celý systém. |
| - | ]# taskset --pid --cpu-list 0-3 9629 | + | //Úloha:// Skúste zvýšiť prioritu procesu s právami roota. |
| - | pid 9629's current affinity list: 2,3 | + | |
| - | pid 9629's new affinity list: 0-3 | + | |
| - | </code> | + | |
| === Manuálové stránky === | === Manuálové stránky === | ||
| Řádek 1035: | Řádek 1046: | ||
| * '' | * '' | ||
| * '' | * '' | ||
| - | * '' | ||
| - | * '' | ||
| ===== Služby ===== | ===== Služby ===== | ||
| + | Službou v Linuxe nazývame aplikáciu (proces) alebo súbor aplikácií tvoriacich logický celok, ktoré bežia na pozadí a typicky čakajú na príchodzie požiadavky, | ||
| - | __Túto | + | ====Systemd units==== |
| + | Systemd nespravuje iba služby. Podobne ako plánovač v kerneli pristupuje k procesom a vláknam transparentne a jednotne ich nazýva //tasks//, systemd dokáže spravovať aj sokety, mount pointy, časovače ('' | ||
| + | //Pozn.//: všetky typy **// | ||
| - | V dnešních distribucích se většinou setkáme s [[https://en.wikipedia.org/wiki/Systemd|systemd]], které se spouští při bootu se systémem a spouští systémové služby. | + | Vstupnou bránou do správy |
| - | (**...maybe TODO...** víc technicky rozepsat podle [[http:// | + | Vypíšme si teda, aké jednotky v systéme vôbec máme. |
| + | < | ||
| + | $ systemctl list-units | ||
| + | </code> | ||
| + | Príkaz nám vrátil zoznam úplne všetkých jednotiek, o ktorých | ||
| - | (*TODO* jednotky možná nebudou nejlepší překlad) | + | < |
| + | $ systemctl list-units -t service | ||
| + | | ||
| + | abrt-journal-core.service | ||
| + | ... | ||
| + | upower.service | ||
| + | user-runtime-dir@1000.service | ||
| + | user@1000.service | ||
| + | wpa_supplicant.service | ||
| + | |||
| + | LOAD = Reflects whether the unit definition was properly loaded. | ||
| + | ACTIVE = The high-level unit activation state, i.e. generalization of SUB. | ||
| + | SUB = The low-level unit activation state, values depend on unit type. | ||
| + | |||
| + | 61 loaded units listed. Pass --all to see loaded but inactive units, too. | ||
| + | To show all installed unit files use ' | ||
| + | </ | ||
| - | Hlavní příkaz pro správu systemd je '' | + | Ako nám povedala nápoveda na konci, zoznam obsahuje iba aktívne služby, pre vypísanie úplne všetkých služieb by sme museli pridať parameter |
| - | Zobrazí stav systému: | ||
| < | < | ||
| - | systemctl | + | $ systemctl |
| + | |||
| + | UNIT FILE | ||
| + | abrt-ccpp.service | ||
| + | abrt-journal-core.service | ||
| + | abrt-oops.service | ||
| + | abrt-pstoreoops.service | ||
| + | abrt-vmcore.service | ||
| + | ... | ||
| </ | </ | ||
| - | Vypíše běžící jednotky: | + | Vďaka týmto 2 veľmi podobným príkazom môžeme pozorovať základné vlastnosti každej služby, ktoré nám hovoria niečo o ich stave: |
| + | * **loaded** - konfiguračný súbor služby bol vporiadku načítaný | ||
| + | * **active** - tzv.// | ||
| + | * **sub** - tzv. // | ||
| + | * **enabled** - značí, že služba má bežať po štarte systému | ||
| + | * **disabled** - značí, že služba nemá bežať po štarte systému, beží teda na vyžiadanie | ||
| + | |||
| + | Keď už sme si povedali, v akých stavoch sa služby môžu nachádzať, | ||
| < | < | ||
| - | systemctl | + | systemctl |
| + | ● sshd.service - OpenSSH server daemon | ||
| + | | ||
| + | | ||
| + | Docs: man: | ||
| + | | ||
| + | Main PID: 819 (sshd) | ||
| + | Tasks: 1 (limit: 4915) | ||
| + | | ||
| + | | ||
| + | | ||
| + | Apr 21 19:14:04 skoleni systemd[1]: Starting OpenSSH server daemon... | ||
| + | Apr 21 19:14:04 skoleni sshd[819]: Server listening on 0.0.0.0 port 22. | ||
| + | Apr 21 19:14:04 skoleni sshd[819]: Server listening on :: port 22. | ||
| + | Apr 21 19:14:04 skoleni systemd[1]: Started OpenSSH server daemon. | ||
| </ | </ | ||
| - | nebo: | + | |
| + | Z výstupu okrem iného vidíme, že služba '' | ||
| < | < | ||
| - | systemctl | + | (root)$ |
| + | $ systemctl status httpd | ||
| + | ● httpd.service - The Apache HTTP Server | ||
| + | | ||
| + | | ||
| </ | </ | ||
| - | Vypíše pouze selhané jednotky: | + | Apache server síce beží, ale po reštarte už bežať nebude, je potrebné službu povoliť (// |
| < | < | ||
| - | systemctl | + | (root)$ |
| + | |||
| + | # overte, ze httpd bezi po restarte | ||
| + | $ systemctl status httpd | ||
| </ | </ | ||
| + | //Pozn.//: My sme si ukázali, ako naštartovať a povoliť službu v 2 krokoch, v praxi sa obe operácie dajú spraviť v 1 kroku za použitia '' | ||
| - | Spustitelné | + | Analogicky by sa použili opačné operácie: |
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | ===Manuálové stránky=== | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | |||
| + | ==== Konfiguračné súbory ==== | ||
| + | Konfiguračné súbory služieb môžu byť v systéme uložené hneď na niekoľkých miestach: | ||
| + | * ''/ | ||
| + | * ''/ | ||
| + | * ''/ | ||
| + | |||
| + | Občas ale potrebujeme konfiguráciu nainštalovaných služieb pozmeniť podľa našich požiadavkov. Ak teda nemáme pracovať s konfiguráciami v ''/ | ||
| + | |||
| + | My si to ukážeme na príklade s '' | ||
| - | Nainstalované služby lze také vypsat přes: | ||
| < | < | ||
| - | systemctl | + | # najprv simulujme pad httpd bez zmeny nastaveni |
| + | (root)$ pkill -SIGSEGV httpd | ||
| + | (root)$ | ||
| + | ● httpd.service - The Apache HTTP Server | ||
| + | | ||
| + | Drop-In: / | ||
| + | | ||
| + | | ||
| + | Docs: man: | ||
| + | Process: 7177 ExecStart=/ | ||
| + | Main PID: 7177 (code=dumped, | ||
| + | | ||
| </ | </ | ||
| - | ===Používání služeb=== | + | Upravme teda nastavenie '' |
| + | < | ||
| + | (root)$ systemctl edit httpd | ||
| + | [Service] | ||
| + | Restart=on-abnormal | ||
| - | Služby mají přípony: | + | # overme, ze override.conf sa vytvoril nasou zmenou |
| - | * services | + | (root)$ systemctl cat httpd |
| - | * mount points (.mount) | + | ... |
| - | * devices (.device) | + | # / |
| - | * sockets (.socket). | + | [Service] |
| + | Restart=on-abnormal | ||
| + | ... | ||
| - | Následující příkazy je nutné pouštět jako root, případně přes ověření | + | # teraz nastartujme httpd znovu a vyskusajme nasimulovat pad |
| + | (root)$ systemctl restart httpd | ||
| + | (root)$ pkill -SIGSEGV httpd | ||
| + | ● httpd.service - The Apache HTTP Server | ||
| + | | ||
| + | Drop-In: / | ||
| + | | ||
| + | | ||
| + | Docs: man: | ||
| + | Main PID: 7846 (httpd) | ||
| + | </ | ||
| - | Okamžitě zapne jednotku: | + | ===Manuálové stránky=== |
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | ====Vytvárame systémovú službu==== | ||
| + | V predchádzajúcej sekcii sme si na príklade ukázali ako zmeniť konfiguráciu existujúcej služby. V tejto sekcii si vytvoríme vlastnú službu úplne od začiatku. V našom prípade pôjde o systémovú službu a preto budú potrebné práva **roota** po celý čas. | ||
| + | |||
| + | Vyrobme službu, ktorá nám zaloguje aktuálny dátum a nazvime ju **mydate.service** a vytvoríme príslušný súbor v ''/ | ||
| < | < | ||
| - | systemctl start unit | + | (root)$ cat / |
| + | [Unit] | ||
| + | Description=Ukazem datum | ||
| + | |||
| + | [Service] | ||
| + | Type=oneshot | ||
| + | ExecStart=date | ||
| </ | </ | ||
| - | Okamžitě vypne jednotku: | + | Parameter '' |
| + | K tomu, aby systemd vedel o našej novej službe je potrebné najskôr zabezpečiť, | ||
| < | < | ||
| - | # systemctl stop unit | + | (root)$ ls -lZ / |
| + | -rw-r--r--. 1 root root unconfined_u: | ||
| + | (root)$ restorecon -FRvv / | ||
| + | Relabeled / | ||
| </ | </ | ||
| - | Restartuje jednotku: | + | Teraz už môžeme povedať systemd o našej novej službe, to sa robí príkazom '' |
| < | < | ||
| - | systemctl | + | (root)$ |
| + | (root)$ systemctl list-unit-files -t service mydate.service | ||
| + | UNIT FILE STATE | ||
| + | mydate.service disabled | ||
| </ | </ | ||
| - | Znovu načtení konfigurace jednotky: | + | Po naštartovaní služby by sme mali vidieť zmenu v logu: |
| < | < | ||
| - | systemctl | + | (root)$ |
| + | (root)$ systemctl status mydate | ||
| + | ● mydate.service - Ukazem datum | ||
| + | | ||
| + | Drop-In: / | ||
| + | | ||
| + | | ||
| + | |||
| + | (root)$ journalctl -e -u mydate | ||
| + | Apr 22 14:01:27 skoleni systemd[1]: Starting Ukazem datum... | ||
| + | Apr 22 14:01:27 skoleni date[8755]: Mon Apr 22 14:01:27 CEST 2019 | ||
| + | Apr 22 14:01:27 skoleni systemd[1]: Started Ukazem datum. | ||
| </ | </ | ||
| - | Zobrazí stav jednotky, jestli | + | Zároveň vidíme, že tým, že je naša služba |
| < | < | ||
| - | systemctl | + | (root)$ |
| + | |||
| + | # / | ||
| + | [Unit] | ||
| + | Description=Ukazem datum | ||
| + | |||
| + | [Service] | ||
| + | Type=oneshot | ||
| + | ExecStart=date | ||
| + | |||
| + | # / | ||
| + | [Service] | ||
| + | RemainAfterExit=yes | ||
| </ | </ | ||
| - | **TODO:** | + | Ďalej by sme chceli, aby sa naša služba púšťala vždy po štarte systému, tak ju skúsme povoliť, ako sme si ukazovali vyššie |
| - | * enable/disable | + | < |
| + | (root)$ systemctl enable myservice | ||
| + | The unit files have no installation config (WantedBy, RequiredBy, Also, Alias | ||
| + | settings in the [Install] section, and DefaultInstance for template units). | ||
| + | This means they are not meant to be enabled using systemctl. | ||
| + | Possible reasons for having this kind of units are: | ||
| + | 1) A unit may be statically enabled by being symlinked from another unit' | ||
| + | | ||
| + | 2) A unit's purpose may be to act as a helper for some other unit which has | ||
| + | a requirement dependency on it. | ||
| + | 3) A unit may be started when needed via activation (socket, path, timer, | ||
| + | | ||
| + | 4) In case of template units, the unit is meant to be enabled with some | ||
| + | | ||
| + | </ | ||
| + | |||
| + | Systemd nám hneď povie, že s našou konfiguráciou nie je niečo vporiadku. Chýba nám tam totiž sekcia '' | ||
| + | |||
| + | ====Systemd target==== | ||
| + | Systemd **target** je špeciálny druh jednotky, ktorý zoskupuje iné jednotky a vytvára tak určitý synchronizačný // | ||
| + | < | ||
| + | $ systemctl cat httpd | ||
| + | [Unit] | ||
| + | ... | ||
| + | After=network.target remote-fs.target nss-lookup.target httpd-init.service | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | Takýchto synchronizačných bodov je v systemd niekoľko a tie úplne najzákladnejšie korešpondujú s operačnými režimami sytému **SysV**, známymi ako // | ||
| + | Vráťme sa teda k našej službe a nastavme ju ako službu spustiteľnú vrámci '' | ||
| + | |||
| + | < | ||
| + | (root)$ systemctl cat mydate | ||
| + | ... | ||
| + | # / | ||
| + | [Service] | ||
| + | RemainAfterExit=yes | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | |||
| + | (root)$ systemctl | ||
| + | Created symlink / | ||
| + | (root)$ systemctl status mydate | ||
| + | ● mydate.service - Ukazem datum | ||
| + | | ||
| + | ... | ||
| + | </code> | ||
| - | * power management suspend, hibernate, poweroff... | + | ===Manuálové stránky=== |
| + | | ||
| + | * '' | ||