Úvod
V informatike veci nejdú vždy podľa plánu. Neočakávané pády systému často nútia správcov systému spustiť reštart a reštartovať jednotlivé služby. Zisťovanie a reštartovanie každej služby, ktorú vaša aplikácia potrebuje na spustenie po páde systému alebo reštarte, môže byť únavné. V tejto prvej časti dvojdielneho návodu vám na praktických príkladoch ukážeme, ako nakonfigurovať služby tak, aby sa po páde systému alebo reštarte servera automaticky spustili. druhá časť sa bude zaoberať teoretickými informáciami o tom, čo sme dosiahli v prvej časti.
Použijeme MySQL databázovú službu pre praktické príklady. Rovnaké princípy však platia aj pre ostatné procesy, ktoré tvoria kompletný server, ako napríklad Nginx, Apache, Redis, alebo iné aplikácie. Môžete si pozrieť naše návody na ako nainštalovať MySQL, Nginx, a Apache.
V Linux distribúciách existujú tri hlavné inicializačné (init) systémy v závislosti od distribúcie, ktorú používate. Niektoré distribúcie môžu obsahovať dva alebo viac init systémov, ako je uvedené nižšie:
- System V – starší init systém, ktorý sa nachádza v starších distribúciách ako:
- Ubuntu 9.04 a staršie
- CentOS 5 a staršie
- Debian 6 a staršie
- Upstart – používaný v predchádzajúcich distribúciách ako:
- CentOS 6
- Ubuntu 9.10 až Ubuntu 14.10 a Ubuntu 14.04
- Systemd – používaný v najnovších distribúciách ako:
- CentOS 7
- Debian 7 a 8.
- Ubuntu 15.04 a novšie
Pozadie
Pre operačné systémy, a najmä Linux a Unix systémy, je bežné, že na pozadí bežia procesy a služby. Takéto služby mohli byť dodané so softvérom operačného systému. Niektoré mohli prísť s používateľskými aplikáciami, ktoré si nainštalujete.
Služby operačného systému zahŕňajú:
- sshd – Je to démon umožňujúci vzdialené pripojenia.
- cupsd – Je to démon riadiaci tlač.
Služby nainštalovaných aplikácií zahŕňajú:
- httpd/apache2 – Služba, ktorá sa dodáva s webovým serverom Apache2.
- nginx – Služba, ktorá sa dodáva s webovým serverom Nginx.
Aby sme zabezpečili prístupnosť našich webových aplikácií, databáz, poštových serverov atď., tieto služby musia bežať nepretržite. Ak ste správcom systému alebo zvedavým vývojárom aplikácií, chcete zabezpečiť, aby tieto služby bežali nepretržite a v prípade nešťastného pádu systému sa po reštarte systému automaticky spustili. A presne to sa naučíme v tomto praktickom návode.
Hoci je nastavenie upozornení a nepretržité monitorovanie vašej Linux distribúcie kľúčové, niektoré Linux služby sa vďaka init systémom, ktoré spravujú služby, dokážu samy opraviť, ak sú správne nakonfigurované.
In Linux distribúciách existujú prevádzkové režimy, ktoré implementujú inicializáciu systému, nazývané úrovne spustenia. Aby sa služba automaticky spustila, musí byť pridaná do úrovne spustenia. Každý systém typu Linux a Unix má štyri spoločné úrovne spustenia, ako je uvedené nižšie:
- 0 – Úroveň spustenia 0 označuje vypnutie systému.
- 1 – Úroveň spustenia 1 označuje režim jedného používateľa, záchranný režim.
- 2, 3, 4 – Tieto úrovne spustenia označujú stavy, kedy sa systém spustil v textovom režime pre viacerých používateľov s povolenou sieťou.
- 5 – Úroveň spustenia 5 označuje grafický režim pre viacerých používateľov s povolenou sieťou.
- 6 – Úroveň spustenia 6 označuje reštart systému.
V tomto návode sa naučíte, ako nakonfigurovať službu Linux na automatické spustenie pri reštarte systému pomocou troch rôznych režimov init vysvetlených skôr: System V, Upstart a Systemd.
Požiadavky
Tento praktický návod predpokladá, že máte k dispozícii Linux VPS, ktorý môžete použiť na sledovanie postupu. Môžete využiť bezplatné skúšobné obdobie v Cloudsigma a spustiť niekoľko serverov na vyskúšanie príkazov. Môžete postupovať podľa nášho podrobného návodu, ako nastaviť vaše Ubuntu servery.
Servery, ktoré vytvoríte v tomto návode, slúžia čisto na sledovanie praktických cvičení a nemali by ste príkazy skúšať na produkčnom serveri, pretože by došlo k prerušeniu mnohých služieb.
Niektoré z distribúcií, ktoré budete potrebovať:
- Ubuntu 9.04 a staršie, alebo Debian 6 x64 (budú použité na demonštráciu init systému System V)
- Ubuntu 14.04 x64 (bude použité na demonštráciu Upstart)
- CentOS 7 x64 (bude použitý na demonštráciu systemd).
Uistite sa, že máte nastaveného iného používateľa ako root s privilégiami sudo. Môžete sa pozrieť na náš návod na konfiguráciu súboru sudoers tu.
Používanie System V
Toto je najstarší init systém, ktorý sa používal v starších distribúciách Linuxu, ako napríklad:
- Debian 6 a starší
- CentOS 5 a starší
- Ubuntu 9.04 a staršie
Väčšina inštalovateľných serverových aplikácií, ako napríklad MySQL a Nginx, sa dodáva s init skriptami uloženými v adresári /etc/init.d predvolene. Tieto skripty im umožňujú spustiť sa po reštarte. Nemusia však byť nakonfigurované na automatické spustenie po páde systému.
Kontrolný zoznam pre automatické spustenie pre System V
Prvým krokom je skontrolovať dostupnosť funkčného Bash init skriptu v adresári /etc/init.d/service. Ak chcete službu povoliť, v distribúciách Debian alebo Ubuntu použite príkaz update-rc.d, v systéme CentOS použite chkconfig. Nahraďte skutočným názvom vašej služby:
|
1 |
sudo update-rc.d service enable |
Vyššie uvedený príkaz vytvorí symbolický odkaz v adresári /etc/rc2.d, ktorý vyzerá ako výstup nižšie. Nevytvárajte ho sami, pretože sa generuje automaticky:
|
1 |
lrwxrwxrwx 1 root root 20 Dec 10 07:09 S02mysql -> ../init.d/service |
Na koniec súboru /etc/inittab pridajte riadok respawn, ako je znázornené vo všeobecnom príklade nižšie. Nezabudnite ho nahradiť skutočnou cestou k spúšťaciemu skriptu vašej aplikácie:
|
1 |
id:2345:respawn:/bin/sh /path/to/your-application/startup |
Zadaním nasledujúcich príkazov zastavíte a spustíte službu:
|
1 2 |
sudo service service-name stop sudo service service-name start |
Ďalej reštartujte server:
|
1 |
sudo reboot |
Ako otestovať zmeny?
Po reštartovaní servera overte, či je služba spustená, vyhľadaním čísla procesu pomocou príkazu:
|
1 |
ps -ef | grep service-name |
Ukončite proces pomocou príkazu:
|
1 |
sudo kill -9 process_number |
Po piatich minútach overte, či je služba spustená a funguje.
Praktická konfigurácia System V s reálnou službou
V nasledujúcich krokoch si vyskúšame reálnu serverovú aplikáciu, ako je MySQL. Mali by ste mať prístup k virtuálnemu stroju Debian 6. S účtom, ktorý má privilégiá sudo, sa k nemu pripojte pomocou SSH alebo putty, ak používate systém Windows.
Krok 1: Inštalácia MySQL
Zadaním nasledujúceho príkazu nainštalujte MySQL:
|
1 |
sudo apt-get install mysql-server -y |
Po spustení inštalácie budete požiadaní o heslo pre root. Potom zadajte heslo podľa vlastného výberu a potvrďte ho. Počkajte na dokončenie inštalácie a potom zadaním nasledujúceho príkazu začnite zabezpečovať MySQL:
|
1 |
mysql_secure_installation |
Budete požiadaní o heslo pre root, ktoré ste zadali predtým. Stlačením klávesu N ho zachováte. Potom stlačením klávesu Y prijmite nasledujúce výzvy na odstránenie anonymných používateľov, zakázanie vzdialeného prihlásenia root a odstránenie testovacej databázy. Nakoniec potvrďte opätovné načítanie tabuľky oprávnení, aby sa zmeny prejavili automaticky.
Týmto je inštalácia MySQL dokončená. Či služba beží, môžete skontrolovať zadaním nasledujúceho príkazu:
|
1 |
service mysql status |
Krok 2: Konfigurácia MySQL na automatické spustenie po reštarte
MySQL je predvolene nakonfigurované na spustenie po reštarte systému. Symbolický odkaz na inicializačný skript MySQL nájdete v adresári /etc/rc2.d. Tieto symbolické odkazy sa nevytvárajú manuálne. Môžete použiť príkaz update-rc.d na povolenie a zakázanie služieb.
Zadaním nasledujúceho príkazu zobrazíte obsah adresára:
|
1 |
ls -l /etc/rc2.d |
Skontrolujte, či vidíte symbolický odkaz na init skript MySQL:
|
1 |
lrwxrwxrwx 1 root root 15 Dec 2 10:42 S01mysql -> ../init.d/mysql |
Písmeno S je dôležité, pretože pokiaľ vidíte S skript v predvolenom adresári úrovne spustenia (runlevel) pre danú službu, init systém spustí službu pri štarte servera. Ak chcete overiť, že sa MySQL automaticky spustí po reštarte, zadajte nasledujúci príkaz na reštartovanie systému:
|
1 |
sudo reboot |
Vaše ssh pripojenie sa počas reštartu ukončí. Počkajte minútu alebo dve a znova sa pripojte. Spustením nasledujúceho príkazu skontrolujte, či služba beží:
|
1 |
service mysql status |
Výstup bude indikovať, že služba beží. To znamená, že sa po reštarte spustila automaticky. Pri službách, ktoré nie sú nakonfigurované na automatické spúšťanie, ich budete musieť nakonfigurovať sami.
Môžeme zakázať službu MySQL a reštartovať systém, aby sme otestovali, či sa automaticky spustí. V systémoch Debian a Ubuntu môžete použiť update-rc.d príkaz na pridanie alebo odstránenie služieb z init systému. Zadajte nasledujúci príkaz na zakázanie služby MySQL:
|
1 |
sudo update-rc.d mysql disable |
Reštartujte systém a znova sa pripojte pomocou ssh. Skúste sa pripojiť k MySQL pomocou nasledujúceho príkazu:
|
1 |
mysql -u root -p |
Dostanete chybu MySQL ako:
|
1 |
ERROR 2002 (HY000): Can't connect to local MySQL server |
Potom zadajte nasledujúci príkaz na opätovné povolenie služby:
|
1 |
sudo update-rc.d mysql enable |
Ak používate distribúciu CentOS, príkaz bude:
|
1 |
sudo chkconfig mysql enable |
Keďže sa MySQL pôvodne nespúšťalo, musíte ho spustiť. Zadajte nasledujúci príkaz:
|
1 |
sudo service mysql start |
Krok 3: Konfigurácia služby (MySQL) na automatické spustenie po páde systému
System V nespustí proces po páde automaticky. Pád systému môžeme nasimulovať tak, že nájdeme ID procesu MySQL a ukončíme ho. Zadajte nasledujúci príkaz na nájdenie ID procesu MySQL:
|
1 |
ps -ef | grep mysql |
Vo výstupe nájdite procesy MySQL. Hlavné procesy, na ktorých beží MySQL, sú mysqld_safe a mysqld. Poznačte si ich ID procesov (sú to čísla) a použite nasledujúce príkazy na ich ukončenie:
|
1 2 |
sudo kill -9 mysqldsafe_number sudo kill -9 mysqld_number |
Skontrolujte stav služby MySQL pomocou príkazu:
|
1 |
sudo service mysql status |
Výstup bude indikovať, že MySQL sa zastavilo. Môžeme ho reštartovať manuálne pomocou príkazu service start. My však chceme automatický proces. Na dosiahnutie tohto automatického správania musíme upraviť súbor /etc/inittab. Toto je prvý súbor, ktorý System V init číta pri spúšťaní systému. Súbor /etc/inittab obsahuje inštrukcie o tom, ako by sa mal proces správať v prípade pádu. Ak je správne nakonfigurovaný, pri páde znova reštartuje službu. V našom prípade chceme zabezpečiť, aby bola služba MySQL jednou z nich.
Súbor /etc/inittab je pre distribúciu Linuxu mimoriadne dôležitý. Určuje, či sa váš systém reštartuje alebo nie. Ak urobíte v príkazoch chybu, systém sa pri reštarte nemusí spustiť. Ako sme už uviedli, dúfame, že tieto príkazy skúšate iba v testovacom prostredí servera a nie v produkčnom prostredí.
Najprv si pred začatím úprav vytvorte kópiu súboru:
|
1 |
sudo cp /etc/inittab /etc/inittab.original |
Potom otvorte súbor pomocou nano:
|
1 |
sudo nano /etc/inittab |
Prejdite na koniec súboru a pridajte nasledujúci úryvok kódu:
|
1 |
ms:2345:respawn:/bin/sh /usr/bin/mysqld_safe |
Vyššie uvedený príkaz reštartuje proces mysql_safe po páde systému. Má štyri polia oddelené dvojbodkami, ako je vysvetlené nižšie:
- ms: Určuje ID pre proces.
- 2345: Určuje úrovne spustenia (runlevels), na ktoré sa príkaz vzťahuje. V tomto prípade: úrovne spustenia 2, 3, 4, 5.
- respawn: Určuje akciu. V tomto prípade proces obnovujeme (respawn) alebo reštartujeme.
- /bin/sh /usr/bin/mysqld_safe: Posledná časť definuje proces – príkaz, ktorý sa vykoná na reštartovanie procesu.
Teraz stlačte Ctrl + O a Enter pre uloženie súboru. Potom stlačte Ctrl + X pre zatvorenie editora. Zadajte nasledujúci príkaz na spustenie služby:
|
1 |
sudo service mysql start |
Reštartujte server, potom spustite príkazy vysvetlené skôr, aby ste našli číslo procesu. Ďalej ukončite procesy, počnúc príkazom ps -ef | grep mysql. Počkajte niekoľko minút a zadajte nasledujúci príkaz na kontrolu stavu MySQL:
|
1 |
sudo service mysql status |
Výstup by mal indikovať, že služba MySQL beží, čo znamená, že sa dokázala reštartovať po páde. Rovnaký postup môžete použiť aj pre ostatné služby na vašom serveri.
Automatické spúšťanie služieb pomocou Upstart
Upstart je ďalší init systém, ktorý bol pôvodne predstavený v Ubuntu 6 a neskôr sa stal predvoleným v Ubuntu 9.10. RHEL 6 a jeho deriváty a Chrome OS od Google tiež používajú init systém Upstart. Pre kroky v tejto časti by ste mali mať server s jednou z nasledujúcich distribúcií:
- Ubuntu 9.10 až Ubuntu 14.10, a LTS verzia Ubuntu, t.j. Ubuntu 14.04.
- CentOS 6
Pozrime sa, ako môžete nakonfigurovať súbory Upstart na automatické spúšťanie služieb servera v prípade reštartov alebo pádov systému. Upstart používa konfiguračné súbory uložené v adresári /etc/init na ovládanie služieb v distribúcii Linuxu. Najnovšie verzie serverových aplikácií, ako sú MySQL a Nginx, inštalujú svoje vlastné init skripty do adresára /etc/init . Budú sa teda spúšťať po reštarte a po páde systému bez toho, aby ste museli čokoľvek robiť.
Kontrolný zoznam automatického spúšťania pre Upstart
Tu je niekoľko referenčných konfigurácií, ktoré môžete skontrolovať, aby ste sa uistili, že vaša služba je nakonfigurovaná na automatické spúšťanie.
- Uistite sa, že služba má init skript v adresári /etc/init/service_name.conf – service_name pričom ide o skutočný názov vašej konkrétnej služby. V súbore /etc/init/service_name.conf by ste mali skontrolovať nasledujúce dva riadky:
- Riadok obsahujúci niečo ako start on runlevel [2345]. Indikuje, že služba sa spustí pri reštarte systému.
- Riadok obsahujúci niečo ako respawn. Indikuje, že služba bude po páde systému znovu spustená/reštartovaná.
- Uistite sa, že v adresári nie je žiadny prepisovací súbor služby (override): /etc/init/service_name.override. Ibaže by ste ho vy alebo iný správca systému vytvorili už skôr.
- Zadajte nasledujúce príkazy na zastavenie a spustenie služby:
|
1 2 |
sudo initctl stop service_name sudo initctl start service_name |
- Reštartujte systém a po niekoľkých minútach sa znova pripojte. Teraz spustite niekoľko testov, aby ste zistili, či všetko funguje
- Po reštarte overte, či služba beží. Zadajte nasledujúci príkaz na vyhľadanie čísla procesu, pričom nahraďte service_name skutočným názvom služby, ktorú testujete:
|
1 |
ps -ef | grep service_name |
- Keď budete mať číslo procesu, zadajte nasledujúci príkaz na ukončenie procesu:
|
1 |
sudo kill -9 process_number |
- Počkajte niekoľko sekúnd a znova overte, či proces beží.
Praktická konfigurácia Upstart s reálnou službou
V nasledujúcej časti sa pokúsime demonštrovať, ako môžete použiť Upstart s reálnou službou. Testy budeme spúšťať na serveri s virtuálnym strojom Ubuntu 14.04 so službou MySQL. Pripojte sa k svojmu testovaciemu serveru Ubuntu 14.04 pomocou ssh alebo putty, ak používate Windows. Štandardne by ste mali používať iného používateľa ako root s privilégiami sudo. Po prihlásení môžeme začať s krokmi:
Krok 1: Inštalácia MySQL
Pred inštaláciou akéhokoľvek nového softvéru nezabudnite vždy aktualizovať svoje balíky:
|
1 |
sudo apt-get update |
Teraz zadajte nasledujúci príkaz na inštaláciu servera MySQL:
|
1 |
sudo apt-get install mysql-server –y |
Po zobrazení výzvy vytvorte heslo pre používateľa root. Počkajte na dokončenie inštalácie a spustením nasledujúceho príkazu začnite zabezpečovať inštaláciu MySQL:
|
1 |
mysql_secure_installation |
Postupujte podľa výziev, ako ste to urobili v predchádzajúcej časti. Potom vymažte oprávnenia (flush privileges), aby sa zmeny prejavili okamžite.
Krok 2: Konfigurácia služby (MySQL) na automatické spustenie po reštarte systému
MySQL je nastavené na automatické spustenie po reštarte. Na jeho konfiguračné súbory sa pozeráme len preto, aby sme sa naučili, ako môžeme nakonfigurovať naše vlastné aplikácie, aby sa tiež automaticky spúšťali po reštarte. Služba MySQL sa po inštalácii spustila automaticky. Poďme sa však uistiť, že beží, zadaním nasledujúceho príkazu:
|
1 |
sudo initctl status mysql |
Mali by ste vidieť výstup indikujúci, že služba MySQL beží, niečo ako:
|
1 |
mysql start/running, process 2553 |
Reštartujte server a znova sa prihláste. Opäť zadajte nasledujúci príkaz, aby ste otestovali, či beží:
|
1 |
sudo initctl status mysql |
Výstup bude indikovať, že MySQL beží, čo znamená, že sa po reštarte spustilo automaticky. V tomto prípade netreba nič meniť. Toto správanie však nemusí byť rovnaké pre iné aplikácie. Možno sa pýtate, ako inicializačný systém Upstart vie, že má automaticky spustiť MySQL po reštarte. MySQL inštaluje svoj spúšťací konfiguračný súbor Upstart na umiestnenie /etc/init/mysql.conf. Súbory Upstart nie sú shellové skripty, ale textové súbory so skriptovými blokmi pre udalosti pre-start a post-start. Tieto bloky inštruujú systém Upstart, čo má vykonať, keď sa proces MySQLd spúšťa alebo keď už bol spustený.
Zadaním nasledujúceho príkazu otvorte súbor v editore nano:
|
1 |
sudo nano /etc/init/mysql.conf |
Výstup súboru môže vyzerať takto:
|
1 2 3 4 5 6 7 8 |
description "MySQL Server" author "Mario Limonciello <superm1@ubuntu.com>" start on runlevel [2345] stop on starting rc RUNLEVEL=[016] respawn respawn limit 2 5 |
Ako vidno, blok start inštruuje MySQL, aby sa spustilo na úrovniach spustenia (runlevels) 2, 3, 4, 5 a nie 0, 1, 6. Ak definujete konfiguráciu Upstart pre svoju aplikáciu, zadefinujete ju v tejto časti. Blok respawn inštruuje Upstart, čo má robiť po páde. O tom budeme hovoriť v ďalšej časti, takže nechajte súbor otvorený v editore nano.
Krok 3: Konfigurácia služby (MySQL) na automatické spustenie po páde
Direktíva respawn v súbore /etc/init/mysql.conf inštruuje Upstart, aby po páde reštartoval službu MySQL.
Direktíva respawn limit inštruuje Upstart, koľkokrát by sa mal pokúsiť reštartovať spadnutú službu MySQL v intervale špecifikovanom v sekundách. Prvý argument (2) označuje počet pokusov. Druhý argument (5) označuje interval v sekundách. Ak sa po páde Upstartu nepodarí znova spustiť službu MySQL v rámci tohto limitu, zostane zastavená. Toto správanie je navrhnuté tak, aby chránilo stabilitu systému v prípade, že by sa neustále pokúšal reštartovať dookola padajúce služby. Teraz môžete editor zatvoriť bez vykonania akýchkoľvek zmien.
Poďme otestovať, či sa MySQL po páde automaticky znova spustí. Zadaním nasledujúceho príkazu skontrolujte stav a získajte číslo procesu služby MySQL:
|
1 |
sudo initctl status mysql |
Výstup by mal vyzerať nejako takto. Poznačte si číslo procesu, pretože ho použijeme neskôr:
|
1 |
mysql start/running, process 738 |
Ďalej zadajte nasledujúci príkaz na ukončenie procesu. Týmto sa simuluje pád. Nahraďte ho číslom procesu, ktoré ste získali v predchádzajúcom príkaze:
|
1 |
sudo kill -9 7738 |
Opäť skontrolujte stav MySQL zadaním nasledujúceho príkazu:
|
1 |
sudo initctl status mysql |
Malo by opäť bežať, ale pravdepodobne s iným číslom procesu:
|
1 |
mysql start/running, process 1428 |
Toto sa deje kvôli direktíve respawn v /etc/init/mysql.conf súbor. Zabezpečuje, že v prípade akéhokoľvek zlyhania systému sa MySQL automaticky spustí. Vaša aplikácia, ktorá závisí od databázy MySQL, tak bude naďalej fungovať podľa očakávania.
Automatické spúšťanie služieb pomocou Systemd
Systemd je inicializačný systém, ktorý sa nachádza vo väčšine najnovších distribúcií Linuxu. Pravdepodobne ho použijete, keď spustíte nový VPS. Prvýkrát bol predstavený v Fedora. Dodáva sa s RHEL 7 a jeho derivátmi ako CentOS 7. Od Ubuntu 15.04 nájdete Systemd natívne. Systemd je spätne kompatibilný s inicializačnými skriptami a príkazmi System V. Preto by mala akákoľvek služba System V fungovať pod Systemd. Väčšina príkazov používaných v System V a Upstart bola upravená tak, aby fungovala so Systemd.
So Systemd sa väčšina serverových aplikácií, ako sú MySQL a Nginx, spustí automaticky po reštarte alebo vypnutí bez toho, aby ste museli čokoľvek meniť. Pre svoje vlastné aplikácie musíte vytvoriť vlastné init skripty na automatické reštartovanie služieb.
Podrobnejšie informácie o Systemd nájdete v našom návode, ako spravovať služby a jednotky Systemd pomocou Systemctl.
Kontrolný zoznam pre automatické spustenie v Systemd
Tu je niekoľko referenčných konfigurácií, ktoré môžete skontrolovať, aby ste sa uistili, že vaša služba je nakonfigurovaná na automatické spúšťanie so Systemd.
- Služba musí mať funkčný init skript Systemd umiestnený v /etc/systemd/system/multi-user.target.wants/serviceName.service. ServiceName je skutočný názov služby, ktorú konfigurujete.
- Príkaz na povolenie služby je:
|
1 |
sudo systemctl enable serviceName.service |
- Príkaz vytvorí symbolický odkaz v adresári /etc/systemd/system/multi-user.target.wants/, ktorý môže vyzerať podobne ako:
|
1 |
lrwxrwxrwx 1 root root 11 Dec 1 04:43 /etc/systemd/system/multi-user.target.wants/serviceName.service -> /usr/lib/systemd/system/serviceName.service |
- S týmto symbolickým odkazom na mieste budete mať povolené automatické reštartovanie po zavedení systému.
- Ak chcete aktivovať zmeny, znova načítajte systémového démona a potom reštartujte službu pomocou nasledujúcich príkazov:
|
1 2 3 |
sudo systemctl daemon-reload sudo systemctl restart serviceName.service |
- Ak chcete otestovať, či vaše konfigurácie spustia službu po reštarte, môžete reštartovať systém:
|
1 |
sudo reboot |
- Po reštarte systému vyhľadajte číslo procesu pomocou príkazu:
|
1 |
ps -ef | grep serviceName |
- Poznačte si číslo procesu a ukončite ho pomocou príkazu:
|
1 |
sudo kill -9 process_number |
- Počkajte niekoľko sekúnd a znova vyhľadajte službu, aby ste overili, že opäť beží.
Praktická konfigurácia Systemd na reálnej službe
V tejto časti sa pokúsime nakonfigurovať službu MySQL na virtuálnom stroji s Ubuntu 20.04.
Krok 1: Pripojte sa k svojmu virtuálnemu privátnemu serveru (Ubuntu 20.04 alebo CentOS 7 x64)
Prihláste sa do svojho VPS alebo ho vytvorte v paneli Cloudsigma a pripojte sa pomocou ssh alebo putty, ak používate Windows. Pre túto časť návodu používame server Ubuntu 20.04. Rovnaké príkazy môžu platiť aj pre CentOS 7. Uistite sa, že používate iného používateľa ako root s privilégiami sudo.
Krok 2: Nainštalujte MySQL (službu, ktorú konfigurujeme)
Najprv aktualizujte systém:
|
1 |
sudo apt update |
Potom môžete nainštalovať server MySQL pomocou príkazu:
|
1 |
sudo apt install mysql-server –y |
Potom spustite nasledujúci príkaz na spustenie zabezpečenia MySQL:
|
1 |
sudo mysql_secure_installation |
Skript sa vás opýta, či chcete nastaviť komponent VALIDATE PASSWORD, alebo stlačením ľubovoľného písmena pokračovať bez povolenia tohto komponentu. Kliknutím na tento odkaz sa dozviete viac o komponente MySQL validate password.
Stlačením klávesu 1 ju povolíte a potom stlačením klávesu 1 vyberte strednú úroveň. Zadajte silné heslo: kombináciu veľkých a malých písmen, špeciálnych znakov a číslic. Potvrďte heslo a potvrďte výzvu, ktorá sa vás opýta, či chcete použiť zadané heslo ako heslo pre root. Pri ostatných výzvach stlačte y, aby ste ich prijali rovnako ako v predchádzajúcich častiach. Nakoniec vymažte oprávnenia (flush privileges) pre MySQL, aby sa zmeny znova načítali.
Krok 3: Konfigurácia MySQL na automatické spustenie po reštarte
MySQL je nakonfigurované tak, aby sa spúšťalo po reštarte, takže nemusíte vykonávať žiadne zmeny. Môžeme však použiť konfiguračné súbory MySQL, aby sme sa naučili, ako konfigurovať naše vlastné súbory.
Najprv skontrolujte, či bola služba MySQL nakonfigurovaná na spustenie pri štarte systému. Zadajte nasledujúci príkaz (všimnite si, že v systéme CentOS sa služba MySQL nazýva mysqld):
|
1 |
sudo systemctl is-enabled mysql.service |
Tu je výstup:

Potom reštartujte VPS zadaním nasledujúceho príkazu:
|
1 |
sudo reboot |
Pripojte sa späť pomocou ssh a zadajte nasledujúci príkaz na kontrolu stavu služby MySQL:
|
1 |
sudo systemctl status mysql.service |
Mali by ste dostať výstup podobný tomu na snímke obrazovky nižšie:

Ak chcete službu MySQL zakázať, zadajte nasledujúci príkaz:
|
1 |
sudo systemctl disable mysql.service |
Výstup naznačuje, že symbolické odkazy na službu MySQL boli zo Systemd odstránené:

Či je služba povolená v systéme Systemd init, môžete otestovať zadaním nasledujúceho príkazu:
|
1 |
sudo systemctl is-enabled mysql.service |
Výstup ukáže, že je zakázaná. Ak reštartujete systém, MySQL sa pri štarte nespustí:
![]()
Službu povolíte zadaním nasledujúceho príkazu:
|
1 |
sudo systemctl enable mysql.service |
Výstup zobrazuje symbolický odkaz na službu MySQL vytvorený v Systemd init:

Po reštarte sa služba MySQL spustí automaticky.
Krok 4: Konfigurácia MySQL na automatické spustenie po páde
MySQL je nakonfigurované tak, aby sa po páde automaticky reštartovalo. Pozrime sa, ako je táto konfigurácia implementovaná v systéme Systemd. Systemd používa na konfiguráciu unit súbory. Zadajte nasledujúci príkaz na otvorenie konfiguračného súboru mysql.service v editore nano:
|
1 |
sudo nano /etc/systemd/system/multi-user.target.wants/mysql.service |
Výstup vyzerá takto:

Zaujíma nás direktíva Restart. Podľa definície sa MySQL reštartuje, ak dôjde k zlyhaniu. Direktíva Restart definuje, čo by sa malo stať v systéme Systemd, rovnako ako direktíva Respawn v systéme Upstart.
Nie všetky služby budú mať túto direktívu. Ak chcete povoliť reštart služby po páde, môžete kedykoľvek pridať direktívu Restart pod blok [Service] konfiguračného unit súboru služby. Ak hlavička [Service] neexistuje, pridajte ju. Teraz ukončite editor stlačením Ctrl + X.
Ak chcete simulovať pád, nájdite ID procesu MySQL zadaním nasledujúceho príkazu:
|
1 |
sudo systemctl status mysql.service |
Príkaz na kontrolu stavu zobrazí ID procesu, v našom prípade je to 3555:

Zadaním nasledujúceho príkazu ukončite proces. Nahraďte ho ID procesu, ktoré ste získali na svojom serveri:
|
1 |
sudo kill -9 3555 |
Zadaním nasledujúceho príkazu skontrolujte stav:
|
1 |
sudo systemctl status mysql.service |
Výstup ukáže, že MySQL beží, ale s novým ID procesu. To znamená, že sa po páde automaticky reštartovalo:

Záver
V tomto návode sme vám predstavili tri inicializačné systémy v distribúciách Linuxu: System V, Upstart a Systemd. Naučili sme sa, ako použiť ktorýkoľvek z init systémov na konfiguráciu nepretržite bežiacich služieb na automatické spustenie po reštarte alebo páde systému. Toto by malo slúžiť ako východiskový bod, keď potrebujete nakonfigurovať svoje služby. Prvá časť tejto série bola prevažne praktickým návodom. druhá časť je teoretickejšia a obsahuje viac podrobností o tom, čo sme robili v prvej časti. Svoje testovacie servery ešte nemažte, pretože ich budete používať aj v druhej časti.
Príjemnú prácu s počítačom!
Komentáre
Zatiaľ žiadne komentáre. Buďte prvý.