skoleni:sprava_uzivatelu_a_sluzeb

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

skoleni:sprava_uzivatelu_a_sluzeb [2019/04/21 10:58] – [Pokročilé nástroje monitorovania] eskultetyskoleni:sprava_uzivatelu_a_sluzeb [2022/11/14 12:26] (aktuální) – upraveno mimo DokuWiki 127.0.0.1
Řádek 891: Řádek 891:
    * ''Memory'' - Údaje o použití pamäte    * ''Memory'' - Údaje o použití pamäte
     * **VIRT** - //virtual memory space (process block)//     * **VIRT** - //virtual memory space (process block)//
-      * Veškerá pamäť, ktorú má process k dispozícii (zásobník, halda, exekucný kód, atď.).+      * Všetka pamäť, ktorú má process k dispozícii (zásobník, halda, exekucný kód, atď.).
     * **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ň zdielaná.+      * Časť, ktorá patrí tomuto procesu a je zároveň zdieľaná.
     * **%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 957: Řádek 957:
     * rozšírenie ''htop'', poskytuje prakticky rovnaké informácie ako ''glances'' v tradičnej "terminálovej" podobe     * rozšírenie ''htop'', poskytuje prakticky rovnaké informácie ako ''glances'' v tradičnej "terminálovej" podobe
   * ''nmon''   * ''nmon''
-    * komplexný monitoring v rozhraní ncurses, jednotlivé aspekty systému sa dajú vypínať a zapínať podľa potreby, výstup má grafovú formu+    * komplexný monitoring v rozhraní ncurses, jednotlivé aspekty systému sa dajú vypínať a zapínať podľa potreby, výstup je v podobe grafov
   * ''nethogs''   * ''nethogs''
     * v podstate ''top'' pre sieťovú komunikáciu, ak sa vyskytne náhly a nečakaný nárast v sieťovej komunikácii, ''nethogs'' je ten správny program na analyzovanie, ktorý proces je za to zodpovedný     * v podstate ''top'' pre sieťovú komunikáciu, ak sa vyskytne náhly a nečakaný nárast v sieťovej komunikácii, ''nethogs'' je ten správny program na analyzovanie, ktorý proces je za to zodpovedný
  
-==== Pokročilé nastavenia ====+==== Priorita a "niceness" ==== 
 +V predchádzajúcich sekciách boli spomenuté termíny ako //priorita// a //niceness//. Aby sme im porozumeli je nutné si najprv povedať niečo o plánovaní procesov.
  
-=== Priority a plánovanie ===+=== Plánovanie procesov === 
 +Plánovanie je druh aktivity, ktorá nám dovoľuje multitasking, teda konkurentné vykonávanie viaverých úloh za určité časové obdobie. Plánovač je kus kernel kódu, ktorý mapuje vykonávanie úlohy (angl.//task//, to môže byť proces alebo vlákno, plánovaču je to jedno, vidí iba "úlohu") na dostupné výpočetné zdroje. To akým spôsobom sa procesy plánujú je nadrámec tohto kurzu a vyžaduje značné znalosti o [[http://os-book.com/OS10/index.html|konceptoch OS]]. Dôoležité je vedieť, že Linux nám nastaviť niekoľko typov plánovacích algoritmov (dokonca sa môžu používať rôzne algoritmy sučasne), v mnohých prípadoch budú tieto algoritmy postavené na priorite procesov.
  
-Vyššie ste mohli vidieť, že každý proces má svoju priorituLinux poskytuje 3 typy plánovačov (**//scheduler//**), každý s vlastním rozsahom priorít.\\ +===Priority=== 
-Okrem priorítposkytujú plánovače aj niekoľko rôznych plánovacích //tried// / //algoritmov//:+Linux rozoznáva 140 priorít v 2 rôznych rozsahoch 
 +  * [1,99] pre //real-time// procesy (to sú také, ktoré uvoľnia zdroje iba ak sa nájde niekto s vyššou prioritou alebo keď skončiataktiež majú tvrdé limity, t.j. proces musí dokončiť úlohu v stanovenom časovom okne) 
 +    pre //real-time// priority platí: **1 < 99** (hodnoty sú v skutočnosti interne invertované
 +  * [100,139] - interval pre normálne (//user-space//) procesy, **100 > 139**
  
-  ''CFS''//completely fair scheduler// - Férový plánovač +**Niceness (NI)** 
-    * Priorita dy 0. +  * hodnota v //user-space//, ktorá sa mapuje na skutočnú PR prioritu kerneli, ktorá sa preloží do daného rozsahu [100,139] 
-    Použiva 40 tzv. //"nice"// hodnotu s rozptylom [-20 .. 19]+  rozsah [-20,19] - čím menšie číslo, tým čšia priorita procesu (štandardne však 0) 
-    * Cím //nižšia// hodnota (-20), tým //častejšie// je proces naplánovaný pre exekúciu. +    * NI slúži len ako váha pre plánovač, aby určil skutočnú prioritu PR  
-    * Poskytuje 3 //triedy//:  +    na výpočet skutočnej priority sa používa vzťah: 
-      * **SCHED_OTHER** - úplne bežná trieda +      <code>PR = 20 + NI</code>
-      **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+
  
-  * ''RT''//real-time// - Prednostný plánovač +My sa teraz zamierame na to, ako hodnoty //"nice"// nastaviť. Slúži k tomu dvojica príkazov ''nice'' a ''renice'', ktoré nastavujú prioritu novým, resp. menia prioritu bežiacim procesom.
-    * Používa 99 priorít v rozsahu [1 .. 99]. +
-    * Proces s //vyššou// prioritou je //preferovanejší//+
-    * Procesy s ''RT'' prioritou sú majoritne uprednostňované pred //"nice"// procesmi +
-    * Poskytuje 2 typy algoritmu:  +
-      * **SCHED_FIFO** - proces beží pokiaľ neskončí alebo nejde späť +
-      * **SCHED_RR** - procesy sa striedajú podľa časového kvanta+
  
-  * ''DL'' //deadline// - Limitový plánovač +Spustime opäť ''dd'' a nastavme rovno //nice// na 5 
-    * Používa špeciálny algoritmus: +<code> 
-      * **SCHED_DEADLINE** +$ nice -5 dd if=/dev/zero of=/dev/null & 
-    * Na základe pridaných informácií o danom procese dokáže plánovať //optimálne//.+$ top 
 +5537 skoleni  25      3880     892      824 R  97.3   0.0   0:04.19 dd                                                                                    
 +1437 skoleni  20   0 3453680 356776 189016 S  1.0   4.4   8:19.49 gnome-shell                                                                           
 +...          
 +</code>
  
-//Pozn.:// Všimnite si, že ''RT'' procesy majú vždy prirodzene vyššiu prioritu +Vidíme, že hoci sme spustili ''dd'' s nižšou prioritou, vyťažuje náš systém najviacV systéme jednoducho nebeží dostatok aktívnych služieb, ktoré by potrebovali konzumovať zdroje. Teraz pridajme náš program stress a pozorujme zmenu:
- +
-Hodnoty //"nice"// sa dajú špecifikovať pri spustení programu príkazom ''nice'' alebo zmeniť existujúcim procesom príkazom ''renice'':+
 <code> <code>
-]# renice -5 9629  +$ stress --m 3 -i 2 & 
-9629 (process ID) old priority 0, new priority -+$ top 
-  +11361 skoleni  20      3880    100      0 R  42.4   0.0   0:26.08 stress                                                                                    
-]# renice 25 9629 +11360 skoleni  20    266028  73492    268 R  41.7   0.6   0:26.35 stress                                                                                    
-9629 (process ID) old priority -5, new priority 19+11362 skoleni  20    266028  48940    268 R  40.7   0.4   0:27.07 stress                                                                                    
 +11356 skoleni  20    266028 181468    268 R  40.4   1.  0:25.71 stress                                                                                    
 +11354 skoleni  20      3880    100      0 R  36.8   0.0   0:24.80 stress                                                                                    
 +11363 skoleni  20      3880    100      0 R  35.1   0.0   0:25.97 stress                                                                                    
 +11358 skoleni  20      3880    100      0 R  28.  0.0   0:25.37 stress                                                                                    
 +5537 skoleni  25    215016    892    824 R  14.9   0.0   0:04.53 dd                                                                                        
 +1437 skoleni  20   0 3453680 356776 189016 D  14.6   2.9 190:30.40 gnome-shell       
 </code> </code>
  
-//Pozn.:// Všimnite si, že je poreba superužívateľské práva.+Stress test nám nám úspešne vyťažuje celý systém. Skúsme niektorým z procesov ''stress'' nastaviť hodnotu //nice// vyššie než má ''dd''. Ideálne použijeme ''htop'', kde sa hodnota //nice// dá zvyšovať klávesou **F8**Výsledok by mohol vyzerať nasledovne:
  
-Plánovací algoritmus sa určuje podľa plánovacej triedy a spolu s prioritami sa nastavujú napíklad príkazom ''chrt'':  
 <code> <code>
-]# chrt --pid 9629 +$ top 
-pid 9629's current scheduling policySCHED_OTHER +  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                   
-pid 9629's current scheduling priority: 0+11360 skoleni  20    266028  64780    268 R  87.4   0.5   3:50.96 stress                                                                                    
 +11361 skoleni  20      3880    100      0 R  81.5   0.0   3:45.24 stress                                                                                    
 +11376 skoleni  25    215016    892    824 R  27.2   0.0   1:29.01 dd                                                                                        
 +11363 skoleni  27      3880    100      0 R  26.8   0.0   2:12.81 stress                                                                                    
 +11356 skoleni  26    266028 129196    268 R  25.2   1.1   2:25.45 stress        
 +</code>
  
-]# chrt --fifo --pid 99 9629+Program ''dd'' sa teda plánuje častejšie ako niektoré procesy programu ''stress''. Zníženie priority môžeme vyskúšať aj manuálne príkazom ''renice''
  
-]# chrt --pid 9629 +<code> 
-pid 9629's current scheduling policySCHED_FIFO +$ renice -n 15 11360 
-pid 9629's current scheduling priority99+$ top 
 + 
 +  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                   
 +11361 skoleni  20      3880    100      0 R  76.8   0.0   5:43.19 stress                                                                                    
 +11376 skoleni  25    215016    892    824 R  56.6   0.0   2:26.26 dd                                                                                        
 +11356 skoleni  26    266028 163780    268 R  44.0   1.3   3:15.84 stress                                                                                    
 +11363 skoleni  27      3880    100      0 R  42.7   0.0   2:54.81 stress     
 +11360 skoleni  35  15  266028  31516    268 R  19.5   0.3   5:44.80 stress                                                                                   
 </code> </code>
  
-Taktiež dokážeme špecifikovať, aby boli určité procesy plánované len na určitej podmnožine procesorov (tzv. ''smp_affinity'' alebo ''cpu_affinity'').\\ +Čo ak by sme naopak chceli prioritu zvýšiť (naprpre program ''dd''):
-Táto vlastnosť sa najjednoduchšie nastavuje príkazom ''taskset'':+
 <code> <code>
-]# taskset --pid --cpu-list 2,3 9629 +$ renice 11376 
-pid 9629's current affinity list: 0-3 +renicefailed to set priority for 11376: Permission denied 
-pid 9629's new affinity list2,3+</code>
  
-Teraz bude PID 9629 plánovaný iba na logických procesoroch 2 3 (CPU)+Vidíme, že na zvýšenie priority je potreba práva užívateľ**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 list2,3 +
-pid 9629's new affinity list: 0-3 +
-</code>+
  
 === Manuálové stránky === === Manuálové stránky ===
Řádek 1034: Řádek 1046:
   * ''nice'' (1)   * ''nice'' (1)
   * ''renice'' (1)   * ''renice'' (1)
-  * ''chrt'' (1) 
-  * ''taskset'' (1) 
  
  
 ===== 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, ktoré obsluhujú (toto však nie je nutná podmienka). Existujú rôzne subsystémy (príp. softvérové kolekcie) na vytváranie a správu služieb, ale na väčšine dnešných distribúcií túto úlohu plní **systemd**. My sme //systemd// spomenuli ako predka všetkých procesov s **PID == 1**. Okrem kľúčovej úlohy //init// systému, ktorý nainicializuje celý //user-space//, plní systemd zároveň úlohu správcu služieb a systému ako takého.
  
-__Túto časť ešťe pripravujeme.__+====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ážspravovať aj sokety, mount pointy, časovač(''systemd.timer'' ako náhrada za ''cron''), targets (target by sa dal v kontexte systemd preložiť ako referenčný bod - //checkpoint// - pre iné služby, uvidíme neskôr), a ďalšie iné entity, ktoré združene nazývame **//units//**.\\ 
 +//Pozn.//: všetky typy **//units//** rozoznáme podľa koncovky (//.service, .mount, .target, .timer//, atď.)
  
-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 //systemd// je príkaz ''systemctl''ktorým má obrovské množstvo zanorených príkazov, ktoré budeme v ďalších ukážkach používať.\\
  
-(**...maybe TODO...** víc technicky rozepsat podle [[http://freedesktop.org/wiki/Software/systemd|freedesktop.org/wiki/Software/systemd]])+Vypíšme si teda, aké jednotky v systéme vôbec máme. 
 +<code> 
 +$ systemctl list-units 
 +</code> 
 +Príkaz nám vrátil zoznam úplne všetkých jednotiek, o ktorých systemd vieKeďže my sa venujeme službám, tak pridaním prepínača sa obmedzíme iba na služby
  
-(*TODO* jednotky možná nebudou nejlepší překlad)+<code> 
 +$ systemctl list-units -t service 
 + UNIT                                        LOAD   ACTIVE SUB     DESCRIPTION                                                                   
 +  abrt-journal-core.service                 loaded active running Creates ABRT problems from coredumpctl messages     
 +  ... 
 +  upower.service                            loaded active running Daemon for power management                                                   
 +  user-runtime-dir@1000.service             loaded active exited  /run/user/1000 mount wrapper                                                  
 +  user@1000.service                         loaded active running User Manager for UID 1000                                                     
 +  wpa_supplicant.service                    loaded active running WPA supplicant                                                               
  
-Hlavní příkaz pro správu systemd je ''systemctl'' (1).+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 'systemctl list-unit-files'
 +</code> 
 + 
 +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 ''--all'' (Vyskúšajte!). Ku každej službe prislúcha konfiguračný súbor v súborovom systéme, pre ich výpis by sme použili vnorený príkaz ''list-unit-files'', ktorý ponúka kompaktnejší výstup.
  
-Zobrazí stav systému: 
 <code> <code>
-systemctl status+systemctl list-unit-files -t service 
 + 
 +UNIT FILE                                   STATE           
 +abrt-ccpp.service                           disabled        
 +abrt-journal-core.service                   enabled         
 +abrt-oops.service                           enabled         
 +abrt-pstoreoops.service                     disabled        
 +abrt-vmcore.service                         enabled   
 +...      
 </code> </code>
  
-Vypíše ží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.//high-level// aktivačný stav, generalizácia **sub**, pokiaľ služba neskončila s chybou, tak je vnímaná ako //active// 
 +  * **sub** - tzv. //low-level// aktivačný stav, popisuje, či aplikácia reálne beží, skončila úspešne alebo s chybou 
 +  * **enabled** - značí, ž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ť, zobrazme si stav a bližšie informácie o konkrétnej službe (**sshd**) v danom momente. K tomu slúži vnorený príkaz ''status''  
 <code> <code>
-systemctl+systemctl status sshd 
 +● sshd.service - OpenSSH server daemon 
 +   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled) 
 +   Active: active (running) since Sun 2019-04-21 19:14:04 CEST; 44min ago 
 +     Docs: man:sshd(8) 
 +           man:sshd_config(5) 
 + Main PID: 819 (sshd) 
 +    Tasks: 1 (limit: 4915) 
 +   Memory: 2.2M 
 +   CGroup: /system.slice/sshd.service 
 +           └─819 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,... 
 +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.
 </code> </code>
-nebo:+ 
 +Z výstupu okrem iného vidíme, že služba ''sshd'' je nastavená ako //enabled//, a teda sa má spustiť po štarte systému. Skúsme teraz naštartovať nejakú službu explicitne. Na našich strojoch by mohla byť dobrým príkladom služba **httpd** (webový server), ktorý ani nebeží a ani nemá bežať po štarte systému, poďme to zmeniť. Službu štartujeme príkazom ''start''
 <code> <code>
-systemctl list-units+(root)$ systemctl start httpd 
 +$ systemctl status httpd 
 +● httpd.service - The Apache HTTP Server 
 +   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) 
 +   Active: active (running) since Sun 2019-04-21 20:01:09 CEST; 3s ago
 </code> </code>
  
-Vypíše pouze selhané jednotky:+Apache server síce beží, ale po reštarte už bežať nebude, je potrebné službu povoliť (//enable//). 
 <code> <code>
-systemctl --failed+(root)$ systemctl enable httpd 
 + 
 +# overte, ze httpd bezi po restarte 
 +$ systemctl status httpd
 </code> </code>
  
 +//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 ''systemctl enable --now <service>''.
  
-Spustitelné služby se nachází v ''/usr/lib/systemd/system/'' a ''/etc/systemd/system/'' (tato cesta má vyšší prioritu).+Analogicky by sa použili opačné operácie: 
 +  * ''systemctl stop <service>'' - zastaví bežiacu službu 
 +  * ''systemctl restart <service>'' - zastaví a znovu spustí službu 
 +  * ''systemctl disable <service>'' - zakáže naštartovanie služby po reštarte systému 
 + 
 +===Manuálové stránky=== 
 +  * ''systemd.unit'' (5) 
 +  * ''systemd.service'' (5) 
 +  * ''systemctl'' (1) 
 + 
 + 
 +==== Konfiguračné súbory ==== 
 +Konfiguračné súbory služieb môžu byť systéme uložené hneď na niekoľkých miestach: 
 +  * ''/etc/systemd/system'' - lokálna perzistentná konfigurácia, sem patria všetky užívateľské služby s efektom na celý systém 
 +  * ''/run/systemd/system'' - dočasné konfigurácie pre dané systémové sedenie 
 +  * ''/usr/lib/systemd/system'' a ''/usr/local/lib/systemd/system'' - konfiguračné súbory, ktoré sa nainštalovali ako súčasť nejakého balíčku, **neodporúča** sa pracovať s týmito konfiguračnými súbormi priamo 
 + 
 +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 ''/usr'' priamo, mohli by sme vytvoriť našu vlastnú identickú kópiu danej služby a používať ju namiesto tej nainštalovanej, ale asi vidíme, že to nie je zrovna efektívny prístup. Systemd nám totiž poskytuje príkaz ''edit'', ktorý dokáže meniť exitujúce konfigurácie za pomoci špeciálneho súboru, ktorý sa vytvorí automaticky ako ''/etc/systemd/system/<sluzba>.d/override.conf''
 + 
 +My si to ukážeme na príklade s ''httpd''. Ako každá iná aplikácia, aj ''httpd'' môže skončiť abnormálne (napr. neoprávnený prístup do pamäte). V kontexte //systemd// by to znamenalo, že ''httpd'' prejde do chybného stavu a služba prestane bežať, čo spôsobí výpadok služby pre klientov. Odhalenie a odstránenie príčiny je nesmierne dôležité, ale za určitých okolností chceme, aby služba bežala naďalej, než zistíme, prečo v skutočnosti spadla. V manuálovej stránke nájdeme parameter ''Restart='', ktorý dovoľuje práve špecifikovať, za akých okolností sa má daná služba reštartovať
  
-Nainstalované služby lze také vypsat přes: 
 <code> <code>
-systemctl list-unit-files+# najprv simulujme pad httpd bez zmeny nastaveni 
 +(root)$ pkill -SIGSEGV httpd 
 +(root)$ systemctl status httpd 
 +● httpd.service - The Apache HTTP Server 
 +   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) 
 +  Drop-In: /etc/systemd/system/httpd.service.d 
 +           └─override.conf 
 +   Active: failed (Result: core-dump) since Mon 2019-04-22 13:29:06 CEST; 1s ago 
 +     Docs: man:httpd.service(8) 
 +  Process: 7177 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=dumped, signal=SEGV) 
 + Main PID: 7177 (code=dumped, signal=SEGV) 
 +   Status: "Running, listening on: port 80"
 </code> </code>
  
-===Používání služeb===+Upravme teda nastavenie ''httpd'' tak, aby sa pri chybe reštartoval 
 +<code> 
 +(root)$ systemctl edit httpd 
 +[Service] 
 +Restart=on-abnormal
  
-Služby mají přípony: +# overme, ze override.conf sa vytvoril nasou zmenou 
-  * services (.service+(root)$ systemctl cat httpd 
-  * mount points (.mount) +... 
-  * devices (.device)  + # /etc/systemd/system/httpd.service.d/override.conf 
-  * sockets (.socket).+[Service] 
 +Restart=on-abnormal 
 +...
  
-Následující příkazy je nutné pouštět jako root, případně přes ověření (**TODO**)+# teraz nastartujme httpd znovu a vyskusajme nasimulovat pad 
 +(root)$ systemctl restart httpd 
 +(root)$ pkill -SIGSEGV httpd 
 +● httpd.service - The Apache HTTP Server 
 +   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) 
 +  Drop-In: /etc/systemd/system/httpd.service.d 
 +           └─override.conf 
 +   Active: active (running) since Mon 2019-04-22 13:41:56 CEST; 1s ago 
 +     Docs: man:httpd.service(8) 
 + Main PID: 7846 (httpd) 
 +</code>
  
-Okamžitě zapne jednotku:+===Manuálové stránky=== 
 +  * ''systemd.unit'' (5) 
 +  * ''systemd.service'' (5) 
 +  * ''systemctl'' (1) 
 + 
 +====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 ''/etc/systemd/system'' s nasledujúcim obsahom:
 <code> <code>
-systemctl start unit+(root)$ cat /etc/systemd/system/mydate.service 
 +[Unit] 
 +Description=Ukazem datum 
 + 
 +[Service] 
 +Type=oneshot 
 +ExecStart=date
 </code> </code>
  
-Okamžitě vypne jednotku:+Parameter ''Type='' hovorí, o aký druh služby sa jedná, naša služba je jednorázová (angl.//oneshot//), teda vypíše dátum a skončí. Parameter ''ExecStart'' zase vraví, čo sa má vykonať, ak spustíme službu, v našom prípade sa zavolá ''date''. \\ 
 +K tomu, aby systemd vedel o našej novej službe je potrebné najskôr zabezpečiť, že súbor má správne SELinux práva, aby ho systemd mohol vôbec čítať.
 <code> <code>
-# systemctl stop unit+(root)$ ls -lZ /etc/systemd/system/mydate.service 
 +-rw-r--r--. 1 root root unconfined_u:object_r:systemd_unit_file_t:s0 0 Apr 22 13:54 /etc/systemd/system/mydate.service 
 +(root)$ restorecon -FRvv /etc/systemd 
 +Relabeled /etc/systemd/system/mydate.service from unconfined_u:object_r:systemd_unit_file_t:s0 to system_u:object_r:systemd_unit_file_t:s0
 </code> </code>
  
-Restartuje jednotku:+Teraz už môžeme povedať systemd o našej novej službe, to sa robí príkazom ''daemon-reload''.
 <code> <code>
-systemctl restart unit+(root)$ systemctl daemon-reload 
 +(root)$ systemctl list-unit-files -t service mydate.service 
 +UNIT FILE      STATE    
 +mydate.service disabled 
 </code> </code>
  
-Znovu načtení konfigurace jednotky:+Po naštartovaní služby by sme mali vidieť zmenu v logu:
 <code> <code>
-systemctl reload unit+(root)$ systemctl start mydate 
 +(root)$ systemctl status mydate 
 +● mydate.service - Ukazem datum 
 +   Loaded: loaded (/etc/systemd/system/mydate.service; disabled; vendor preset: disabled) 
 +  Drop-In: /etc/systemd/system/mydate.service.d 
 +           └─override.conf 
 +   Active: inactive (dead) 
 + 
 +(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.
 </code> </code>
  
-Zobrazí stav jednotkyjestli služba ží nebo ne (není nutné root)+Zároveň vidímeže tým, že je naša služba nastavená ako //oneshot//, tak ihneď prejde do stavu **inactive**. Ak by sme chceli zachovať stav **active** aj keď proces už skončil, môžeme tak učiniť parametrom ''RemainAfterExit''.
 <code> <code>
-systemctl status unit+(root)$ systemctl cat mydate.service 
 + 
 +# /etc/systemd/system/mydate.service 
 +[Unit] 
 +Description=Ukazem datum 
 + 
 +[Service] 
 +Type=oneshot 
 +ExecStart=date 
 + 
 +# /etc/systemd/system/mydate.service.d/override.conf 
 +[Service] 
 +RemainAfterExit=yes
 </code> </code>
  
-**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+<code> 
 +(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'
 +   .wants/ or .requires/ directory. 
 +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, 
 +   D-Bus, udev, scripted systemctl call, ...). 
 +4) In case of template units, the unit is meant to be enabled with some 
 +   instance name specified. 
 +</code> 
 + 
 +Systemd nám hneď povie, že s našou konfiguráciou nie je niečo vporiadku. Chýba nám tam totiž sekcia ''[Install]'', ktorá je pre systemd kľúčová, pretože mu vraví, kedy našu službu môže spustiť (služby totiž môžu mať na sebe závislosti). Tu sa dostávame k téme **//targets//**. 
 + 
 +====Systemd target==== 
 +Systemd **target** je špeciálny druh jednotky, ktorý zoskupuje iné jednotky a vytvára tak určitý synchronizačný //checkpoint// pre služby, ktoré majú definované závislosti, napr. nemá význam spúšťat webserver, keď nemáme spustený **NetworkManager** a nemáme nakonfigurovanú sieť. Takáto závislosť sa potom prejaví v konfigurácii ''httpd'' nasledovne 
 +<code> 
 +$ systemctl cat httpd 
 +[Unit] 
 +... 
 +After=network.target remote-fs.target nss-lookup.target httpd-init.service 
 +... 
 +</code> 
 + 
 +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 //**runlevels**//. Hoci systemd rozoznáva aj //runlevels//, správame sa k nim jednotne ako aj k iným //targets//. Mapovanie medzi starými //runlevels// a systemd je pekne vidno [[https://wiki.archlinux.org/index.php/systemd#Mapping_between_SysV_runlevels_and_systemd_targets|tu]].\\ 
 +Vráťme sa teda k našej službe a nastavme ju ako službu spustiteľnú vrámci ''multi-user.target'' a službu povoľme: 
 + 
 +<code> 
 +(root)$ systemctl cat mydate 
 +... 
 +# /etc/systemd/system/mydate.service.d/override.conf 
 +[Service] 
 +RemainAfterExit=yes 
 + 
 +[Install] 
 +WantedBy=multi-user.target 
 + 
 +(root)$ systemctl enable mydate 
 +Created symlink /etc/systemd/system/multi-user.target.wants/mydate.service → /etc/systemd/system/mydate.service. 
 +(root)$ systemctl status mydate 
 +● mydate.service - Ukazem datum 
 +   Loaded: loaded (/etc/systemd/system/mydate.service; enabled; vendor preset: disabled) 
 +... 
 +</code>
  
-power management suspend, hibernate, poweroff...+===Manuálové stránky=== 
 +  ''systemctl'' (1) 
 +  * ''systemd.target'' (5)
  • Poslední úprava: 2022/11/14 11:12
  • (upraveno mimo DokuWiki)