Uvod
U računalstvu stvari ne idu uvijek po planu. Često neočekivana rušenja sustava potiču administratore sustava da pokrenu ponovno pokretanje sustava i pojedinačnih usluga. Otkrivanje i ponovno pokretanje svake usluge koja je vašoj aplikaciji potrebna za rad nakon rušenja sustava ili ponovnog pokretanja može biti naporno. U ovom prvom dijelu vodiča od dva dijela, pokazat ćemo vam kako konfigurirati usluge da se automatski pokreću nakon rušenja sustava ili ponovnog pokretanja poslužitelja uz praktične primjere. Drugi dio pokrit će teorijske informacije o tome što smo postigli u prvom dijelu.
Koristit ćemo MySQL bazu podataka kao uslugu za praktične primjere. Međutim, isti se principi primjenjuju i na druge procese koji čine cjeloviti poslužitelj kao što su Nginx, Apache, Redis, ili druge aplikacije. Možete pogledati naše vodiče o tome kako instalirati MySQL, Nginx, i Apache.
U Linux distribucijama postoje tri glavna sustava za inicijalizaciju (init sustava), ovisno o distribuciji koju koristite. Neke distribucije mogu doći s dva ili više init sustava kao što je navedeno u nastavku:
- System V – stariji init sustav koji se nalazi u starijim distribucijama kao što su:
- Ubuntu 9.04 i ranije
- CentOS 5 i ranije
- Debian 6 i ranije
- Upstart – korišten u bivšim distribucijama kao što su:
- CentOS 6
- Ubuntu 9.10 do Ubuntu 14.10 i Ubuntu 14.04
- Systemd – korišten u najnovijim distribucijama kao što su:
- CentOS 7
- Debian 7 i 8.
- Ubuntu 15.04 i novije
Pozadina
Uobičajeno je da operacijski sustavi, a posebno Linux i Unix sustavi imaju procese i usluge koji rade u pozadini. Takve usluge mogu biti isporučene sa softverom operacijskog sustava. Neke su možda došle s korisničkim aplikacijama koje instalirate.
Usluge operacijskog sustava uključuju:
- sshd – To je demon koji omogućuje udaljene veze.
- cupsd – To je demon koji kontrolira ispis.
Usluge instaliranih aplikacija uključuju:
- httpd/apache2 – Usluga koja dolazi s web poslužiteljem Apache2.
- nginx – Usluga koja dolazi s web poslužiteljem Nginx.
Kako bismo osigurali da su naše web aplikacije, baze podataka, poslužitelji e-pošte itd. dostupni, takve usluge moraju raditi neprekidno. Ako ste administrator sustava ili znatiželjni razvojni programer aplikacija, želite osigurati da takve usluge rade neprekidno, a u nesretnom slučaju rušenja sustava, da se automatski pokrenu nakon ponovnog pokretanja sustava. I to je upravo ono što ćemo naučiti u ovom praktičnom vodiču.
Iako je postavljanje upozorenja i kontinuirano praćenje vaše Linux distribucije ključno, neke se Linux usluge mogu same oporaviti ako su dobro konfigurirane, zahvaljujući init sustavima koji upravljaju uslugama.
U Linux distribucijama postoje načini rada koji implementiraju inicijalizaciju sustava pod nazivom razine pokretanja. Da bi se usluga automatski pokrenula, mora se dodati u razinu pokretanja. Svaki sustav sličan Linuxu i Unixu ima četiri uobičajene razine pokretanja kao što je navedeno u nastavku:
- 0 – Razina pokretanja 0 označava gašenje sustava.
- 1 – Razina pokretanja 1 označava način rada za jednog korisnika, način spašavanja.
- 2, 3, 4 – Ove razine pokretanja označavaju stanja u kojima se sustav pokrenuo u višekorisničkom, mrežnom, tekstualnom načinu rada.
- 5 – Razina pokretanja 5 označava višekorisnički mrežni, grafički način rada.
- 6 – Razina pokretanja 6 označava ponovno pokretanje sustava.
U ovom vodiču ćete naučiti kako konfigurirati Linux uslugu da se automatski pokreće kada se sustav ponovno pokrene koristeći tri različita init načina objašnjena ranije: System V, Upstart i Systemd.
Preduvjeti
Ovaj praktični vodič pretpostavlja da imate Linux VPS koji možete koristiti za praćenje. Možete iskoristiti besplatno probno razdoblje na Cloudsigma i pokrenuti nekoliko poslužitelja kako biste isprobali naredbe. Možete pratiti naš korak-po-korak vodič o tome kako postaviti svoje Ubuntu poslužitelje.
Poslužitelji koje izradite u ovom vodiču služe isključivo za praćenje praktičnih vježbi i ne biste trebali isprobavati naredbe na produkcijskom poslužitelju jer će mnoge usluge biti prekinute.
Neke od distribucija koje će vam trebati:
- Ubuntu 9.04 i ranije, ili Debian 6 x64 (koristit će se za demonstraciju System V init sustava)
- Ubuntu 14.04 x64 (koristit će se za demonstraciju Upstarta)
- CentOS 7 x64 (koristit će se za demonstraciju systemd-a).
Provjerite jeste li postavili korisnika koji nije root sa sudo privilegijama. Možete pogledati naš vodič o konfiguriranju datoteke sudoers ovdje.
Korištenje sustava System V
Ovo je najstariji init sustav koji se koristio u ranijim distribucijama Linuxa kao što su:
- Debian 6 i raniji
- CentOS 5 i raniji
- Ubuntu 9.04 i raniji
Većina instalacijskih poslužiteljskih aplikacija kao što su MySQL i Nginx dolazi s init skriptama spremljenim u /etc/init.d direktoriju prema zadanim postavkama. Ove skripte omogućuju im pokretanje nakon ponovnog pokretanja. Međutim, možda nisu konfigurirane za automatsko pokretanje nakon rušenja sustava.
Kontrolni popis za automatsko pokretanje za System V
Prvi korak je provjera dostupnosti funkcionalne Bash init skripte u direktoriju /etc/init.d/service. Da biste omogućili uslugu, u Debian ili Ubuntu distribucijama, koristite update-rc.d naredbu, u CentOS sustavu, koristite chkconfig. Zamijenite sa stvarnim nazivom vaše usluge:
|
1 |
sudo update-rc.d service enable |
Gornja naredba stvara simboličku poveznicu u /etc/rc2.d direktoriju koji izgleda kao izlaz u nastavku. Nemojte ga sami stvarati jer se automatski generira:
|
1 |
lrwxrwxrwx 1 root root 20 Dec 10 07:09 S02mysql -> ../init.d/service |
Na dnu datoteke /etc/inittab dodajte redak respawn kao što je prikazano u općenitom primjeru u nastavku. Ne zaboravite ga zamijeniti stvarnom putanjom do pokretačke skripte vaše aplikacije:
|
1 |
id:2345:respawn:/bin/sh /path/to/your-application/startup |
Unesite sljedeće naredbe za zaustavljanje i pokretanje usluge:
|
1 2 |
sudo service service-name stop sudo service service-name start |
Zatim ponovno pokrenite poslužitelj:
|
1 |
sudo reboot |
Kako testirati promjene?
Nakon ponovnog pokretanja poslužitelja, provjerite je li usluga aktivna traženjem broja procesa pomoću naredbe:
|
1 |
ps -ef | grep service-name |
Ubijte proces pomoću naredbe:
|
1 |
sudo kill -9 process_number |
Nakon pet minuta provjerite je li usluga aktivna i radi li.
Praktična konfiguracija sustava System V sa stvarnom uslugom
U sljedećim koracima isprobat ćemo stvarnu poslužiteljsku aplikaciju kao što je MySQL. Trebali biste imati pristup Debian 6 virtualnom stroju. S računom koji ima sudo privilegije, povežite se s njim pomoću SSH-a ili putty ako ste na Windows radnoj površini.
Korak 1: Instalirajte MySQL
Unesite sljedeću naredbu za instalaciju MySQL-a:
|
1 |
sudo apt-get install mysql-server -y |
Kada instalacija započne, od vas će se tražiti lozinka za root. Zatim unesite lozinku po svom izboru i potvrdite je. Pričekajte da se instalacija završi, a zatim unesite sljedeću naredbu kako biste započeli osiguravanje MySQL-a:
|
1 |
mysql_secure_installation |
Od vas će se tražiti lozinka za root koju ste ranije unijeli. Pritisnite N da biste je zadržali. Zatim pritisnite Y da biste prihvatili sljedeće upite za uklanjanje anonimnih korisnika, onemogućavanje udaljene prijave za root i uklanjanje testne baze podataka. Na kraju, prihvatite ponovno učitavanje tablice privilegija kako bi se promjene automatski primijenile.
Time je instalacija MySQL-a završena. Možete provjeriti radi li usluga unosom sljedeće naredbe:
|
1 |
service mysql status |
Korak 2: Konfigurirajte MySQL za automatsko pokretanje nakon ponovnog pokretanja
MySQL je prema zadanim postavkama konfiguriran za pokretanje nakon ponovnog pokretanja sustava. Simboličku poveznicu na inicijalizacijsku skriptu MySQL-a možete pronaći u /etc/rc2.d direktoriju. Ove se simboličke poveznice ne stvaraju ručno. Možete koristiti update-rc.d naredbu za omogućavanje i onemogućavanje usluga.
Unesite sljedeću naredbu za ispis sadržaja direktorija:
|
1 |
ls -l /etc/rc2.d |
Provjerite možete li uočiti simboličku poveznicu na MySQL init skriptu:
|
1 |
lrwxrwxrwx 1 root root 15 Dec 2 10:42 S01mysql -> ../init.d/mysql |
Slovo S je važno, jer sve dok možete vidjeti S skripta pod zadanim direktorijem razine pokretanja za uslugu, init sustav će pokrenuti uslugu kada se poslužitelj pokrene. Kako biste provjerili hoće li se MySQL automatski pokrenuti nakon ponovnog pokretanja, unesite sljedeću naredbu za ponovno pokretanje sustava:
|
1 |
sudo reboot |
Vaša ssh veza se prekida tijekom ponovnog pokretanja. Pričekajte minutu ili dvije i ponovno se povežite. Pokrenite sljedeću naredbu kako biste provjerili radi li usluga:
|
1 |
service mysql status |
Izlaz će pokazati da usluga radi. To znači da se pokrenula automatski nakon ponovnog pokretanja. Za usluge koje nisu konfigurirane za automatsko pokretanje, morat ćete ih sami konfigurirati.
Možemo onemogućiti MySQL uslugu i ponovno pokrenuti sustav kako bismo testirali hoće li se automatski pokrenuti. U Debian i Ubuntu sustavima možete koristiti update-rc.d naredbu za dodavanje ili uklanjanje usluga iz init sustava. Unesite sljedeću naredbu za onemogućavanje MySQL usluge:
|
1 |
sudo update-rc.d mysql disable |
Ponovno pokrenite sustav i ponovno se povežite pomoću ssh-a. Pokušajte se povezati s MySQL-om pomoću sljedeće naredbe:
|
1 |
mysql -u root -p |
Dobit ćete MySQL pogrešku poput:
|
1 |
ERROR 2002 (HY000): Can't connect to local MySQL server |
Zatim unesite sljedeću naredbu za ponovno omogućavanje usluge:
|
1 |
sudo update-rc.d mysql enable |
Ako ste na CentOS distribuciji, naredba će biti:
|
1 |
sudo chkconfig mysql enable |
Budući da se MySQL u početku nije pokretao, morate ga pokrenuti. Unesite sljedeću naredbu:
|
1 |
sudo service mysql start |
Korak 3: Konfiguriranje usluge (MySQL) za automatsko pokretanje nakon rušenja sustava
System V neće automatski pokrenuti proces nakon rušenja. Možemo simulirati rušenje sustava pronalaženjem ID-ja MySQL procesa i njegovim prekidanjem. Unesite sljedeću naredbu kako biste pronašli ID MySQL procesa:
|
1 |
ps -ef | grep mysql |
Iz izlaza pronađite MySQL procese. Glavni procesi koji pokreću MySQL su mysqld_safe and mysqld. Zabilježite njihove ID-jeve procesa (to su brojevi) i upotrijebite sljedeće naredbe da ih prekinete:
|
1 2 |
sudo kill -9 mysqldsafe_number sudo kill -9 mysqld_number |
Provjerite status MySQL usluge pomoću naredbe:
|
1 |
sudo service mysql status |
Izlaz će pokazati da je MySQL zaustavljen. Možemo ga ručno ponovno pokrenuti pomoću naredbe service start. Međutim, želimo automatski proces. Da bismo postigli ovo automatsko ponašanje, moramo urediti datoteku /etc/inittab. To je prva datoteka koju System V init čita prilikom pokretanja. Datoteka /etc/inittab sadrži upute o tome kako bi se proces trebao ponašati ako se sruši. Ako je ispravno konfigurirana, ponovno pokreće sustav kada dođe do rušenja. U našem slučaju, želimo osigurati da je MySQL jedna od tih usluga.
Datoteka /etc/inittab iznimno je ključna za Linux distribuciju. Ona određuje hoće li se vaš sustav ponovno pokrenuti ili ne. Ako pogriješite u naredbama, sustav se možda neće pokrenuti kada ga ponovno pokrenete. Kao što smo naveli, nadamo se da ove naredbe isprobavate samo u testnom okruženju poslužitelja, a ne u produkcijskom okruženju.
Prvo napravite kopiju datoteke prije nego što počnete s uređivanjem:
|
1 |
sudo cp /etc/inittab /etc/inittab.original |
Zatim otvorite datoteku pomoću nano urednika:
|
1 |
sudo nano /etc/inittab |
Pomaknite se do kraja datoteke i dodajte sljedeći isječak koda:
|
1 |
ms:2345:respawn:/bin/sh /usr/bin/mysqld_safe |
Gornja naredba ponovno pokreće proces mysql_safe nakon rušenja sustava. Sastoji se od četiri polja odvojena dvotočkama, kao što je objašnjeno u nastavku:
- ms: Određuje ID za proces.
- 2345: Određuje razine pokretanja (runlevels) na koje se naredba primjenjuje. U ovom slučaju: razine pokretanja 2, 3, 4, 5.
- respawn: Određuje radnju. U ovom slučaju, ponovno pokrećemo (respawn) proces.
- /bin/sh /usr/bin/mysqld_safe: Zadnji dio definira proces – naredbu koja se izvršava za ponovno pokretanje procesa.
Sada pritisnite Ctrl + O i Enter kako biste spremili datoteku. Zatim pritisnite Ctrl + X za zatvaranje uređivača. Unesite sljedeću naredbu za pokretanje usluge:
|
1 |
sudo service mysql start |
Ponovno pokrenite poslužitelj, a zatim pokrenite prethodno objašnjene naredbe kako biste pronašli broj procesa. Zatim prekinite procese, počevši s naredbom ps -ef | grep mysql. Pričekajte nekoliko minuta i unesite sljedeću naredbu kako biste provjerili status MySQL-a:
|
1 |
sudo service mysql status |
Izlaz bi trebao pokazati da je MySQL usluga aktivna i pokrenuta, što znači da se uspjela ponovno pokrenuti nakon rušenja. Isti postupak možete slijediti i za druge usluge na svom poslužitelju.
Automatsko pokretanje usluga pomoću Upstarta
Upstart je još jedan init sustav koji je prvotno uveden u Ubuntu 6, a kasnije je postao zadani u Ubuntu 9.10. RHEL 6 i njegovi derivati, te Googleov Chrome OS također koriste Upstart init sustav. Za korake u ovom odjeljku trebali biste imati poslužitelj na kojem se izvodi bilo koja od sljedećih distribucija:
- Ubuntu 9.10 do Ubuntu 14.10, te LTS verzija Ubuntua, tj. Ubuntu 14.04.
- CentOS 6
Pogledajmo kako možete konfigurirati Upstart datoteke za automatsko pokretanje usluga vašeg poslužitelja u slučaju ponovnog pokretanja ili rušenja sustava. Upstart koristi konfiguracijske datoteke pohranjene pod /etc/init direktorijem za upravljanje uslugama u Linux distribuciji. Većina novijih verzija poslužiteljskih aplikacija kao što su MySQL i Nginx instaliraju vlastite init skripte u /etc/init direktorij. Stoga će se pokrenuti nakon ponovnog pokretanja i nakon rušenja sustava bez da morate išta učiniti.
Kontrolni popis za automatsko pokretanje za Upstart
Evo nekoliko referentnih konfiguracija koje trebate provjeriti kako biste osigurali da je vaša usluga konfigurirana za automatsko pokretanje.
- Provjerite ima li usluga init skriptu u direktoriju /etc/init/service_name.conf – service_name što je stvarni naziv vaše specifične usluge. Trebali biste provjeriti sljedeća dva retka u /etc/init/service_name.conf datoteci:
- Redak koji sadrži nešto poput start on runlevel [2345]. To označava da će se usluga pokrenuti prilikom ponovnog pokretanja sustava.
- Redak koji sadrži nešto poput respawn. To označava da će se usluga ponovno pokrenuti (respawn) nakon rušenja sustava.
- Provjerite da u direktoriju nema datoteke za nadjačavanje usluge: /etc/init/service_name.override. Osim ako ste je vi ili drugi administrator sustava ranije izradili.
- Unesite sljedeće naredbe za zaustavljanje i pokretanje usluge:
|
1 2 |
sudo initctl stop service_name sudo initctl start service_name |
- Ponovno pokrenite sustav i ponovno se povežite nakon nekoliko minuta. Sada pokrenite nekoliko testova kako biste vidjeli radi li sve
- Nakon ponovnog pokretanja, provjerite je li usluga aktivna i pokrenuta. Unesite sljedeću naredbu za pretraživanje broja procesa, zamijenite service_name sa stvarnim nazivom usluge koju testirate:
|
1 |
ps -ef | grep service_name |
- Nakon što dobijete broj procesa, unesite sljedeću naredbu za prekid procesa:
|
1 |
sudo kill -9 process_number |
- Pričekajte nekoliko sekundi i ponovno provjerite je li proces aktivan i pokrenut.
Praktična konfiguracija Upstarta sa stvarnom uslugom
U sljedećem odjeljku pokušat ćemo prikazati kako možete koristiti Upstart sa stvarnom uslugom. Testove ćemo provoditi na poslužitelju virtualnog stroja Ubuntu 14.04 s MySQL-om kao uslugom. Povežite se na svoj testni poslužitelj Ubuntu 14.04 pomoću ssh-a ili puttyja ako ste na Windowsima. Prema pravilu, trebali biste koristiti korisnika koji nije root s privilegijama sudo. Nakon što se prijavite, možemo započeti s koracima:
Korak 1: Instalirajte MySQL
Uvijek se sjetite ažurirati svoje pakete prije instaliranja bilo kojeg novog softvera:
|
1 |
sudo apt-get update |
Sada unesite sljedeću naredbu za instalaciju MySQL poslužitelja:
|
1 |
sudo apt-get install mysql-server –y |
Stvorite root lozinku kada se to od vas zatraži. Pričekajte da se instalacija završi i pokrenite sljedeću naredbu kako biste započeli osiguravanje svoje MySQL instalacije:
|
1 |
mysql_secure_installation |
Slijedite upute, kao što ste to učinili u prethodnom odjeljku. Zatim ispraznite privilegije (flush privileges) kako bi promjene odmah stupile na snagu.
Korak 2: Konfiguriranje usluge (MySQL) za automatsko pokretanje nakon ponovnog pokretanja sustava
MySQL je postavljen da se automatski pokreće nakon ponovnog pokretanja. Gledamo njegove konfiguracijske datoteke samo kako bismo naučili kako možemo konfigurirati naše prilagođene aplikacije da se također automatski pokreću nakon ponovnog pokretanja. Usluga MySQL pokrenuta je automatski nakon instalacije. Međutim, potvrdimo da radi unosom sljedeće naredbe:
|
1 |
sudo initctl status mysql |
Trebali biste vidjeti izlaz koji pokazuje da usluga MySQL radi, otprilike ovako:
|
1 |
mysql start/running, process 2553 |
Ponovno pokrenite poslužitelj i ponovno se prijavite. Ponovno unesite sljedeću naredbu kako biste testirali radi li:
|
1 |
sudo initctl status mysql |
Izlaz će pokazati da MySQL radi, što znači da je automatski pokrenut nakon ponovnog pokretanja. U ovom slučaju ništa ne treba mijenjati. Međutim, ovo ponašanje možda neće biti isto za druge aplikacije. Možda se pitate kako Upstart init sustav zna da bi trebao automatski pokrenuti MySQL nakon ponovnog pokretanja. MySQL instalira svoju Upstart konfiguracijsku datoteku za pokretanje na lokaciji /etc/init/mysql.conf. Upstart datoteke nisu shell skripte, već tekstualne datoteke s blokovima skripti za događaje prije pokretanja (pre-start) i nakon pokretanja (post-start). Blokovi upućuju Upstart sustav što treba izvršiti kada se MySQLd proces pokreće ili kada je već pokrenut.
Unesite sljedeću naredbu za otvaranje datoteke u uređivaču nano:
|
1 |
sudo nano /etc/init/mysql.conf |
Izlaz datoteke može izgledati ovako:
|
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 |
Kao što se vidi, start blok upućuje MySQL da se pokrene na razinama pokretanja (runlevels) 2,3,4,5, a ne 0,1,6. Ako definirate Upstart konfiguraciju za svoju aplikaciju, definirat ćete je u ovom odjeljku. Blok respawn upućuje Upstart što učiniti nakon rušenja. O tome ćemo raspravljati u sljedećem odjeljku, stoga držite datoteku otvorenom u uređivaču nano.
Korak 3: Konfiguriranje usluge (MySQL) za automatsko pokretanje nakon rušenja
Direktiva respawn u datoteci /etc/init/mysql.conf upućuje Upstart da ponovno pokrene uslugu MySQL nakon rušenja.
Direktiva respawn limit upućuje Upstart o tome koliko puta treba pokušati ponovno pokrenuti srušenu uslugu MySQL u intervalu navedenom u sekundama. Prvi argument, (2) označava broj pokušaja. Drugi argument, (5) označava interval u sekundama. Ako nakon rušenja Upstart ne uspije ponovno pokrenuti (respawn) uslugu MySQL unutar praga, ona će ostati zaustavljena. Ovo ponašanje je osmišljeno kako bi se sustav zaštitio od utjecaja na njegovu stabilnost u slučaju da se neprestano pokušavaju ponovno pokrenuti usluge koje se stalno ruše. Sada možete zatvoriti uređivač bez unošenja ikakvih promjena.
Testirajmo hoće li se MySQL automatski ponovno pokrenuti nakon rušenja. Unesite sljedeću naredbu kako biste provjerili status i dobili broj procesa usluge MySQL:
|
1 |
sudo initctl status mysql |
Izlaz bi trebao biti otprilike ovakav. Zabilježite broj procesa jer ćemo ga koristiti kasnije:
|
1 |
mysql start/running, process 738 |
Zatim unesite sljedeću naredbu za prekid procesa. Ovo simulira rušenje. Zamijenite s brojem procesa koji ste dobili u prethodnoj naredbi:
|
1 |
sudo kill -9 7738 |
Ponovno provjerite status MySQL-a unosom sljedeće naredbe:
|
1 |
sudo initctl status mysql |
Trebao bi ponovno raditi, ali vjerojatno s drugim brojem procesa:
|
1 |
mysql start/running, process 1428 |
To se događa zbog direktive respawn u /etc/init/mysql.conf datoteka. Ona osigurava da će se u slučaju bilo kakvog kvara sustava MySQL automatski pokrenuti. Stoga će vaša aplikacija koja ovisi o MySQL bazi podataka nastaviti raditi kako se očekuje.
Automatsko pokretanje usluga uz Systemd
Systemd je sustav za inicijalizaciju koji se nalazi u većini novijih Linux distribucija. Vjerojatno je to ono što ćete koristiti kada pokrenete novi VPS. Prvi put je uveden u Fedora. Dolazi s RHEL 7 i njegovim derivatima kao što je CentOS 7. Od Ubuntu 15.04, Systemd ćete pronaći izvorno. Systemd je unatrag kompatibilan s inicijalizacijskim skriptama i naredbama za System V. Stoga bi svaka System V usluga trebala raditi pod Systemd-om. Većina naredbi korištenih u System V i Upstart modificirana je za rad sa Systemd-om.
Uz Systemd, većina poslužiteljskih aplikacija kao što su MySQL i Nginx pokrenut će se automatski nakon ponovnog pokretanja ili gašenja, a da pritom ne morate ništa mijenjati. Za svoje prilagođene aplikacije morate izraditi vlastite init skripte za automatsko ponovno pokretanje usluga.
Za detaljnije informacije o Systemd-u, pogledajte naš vodič o tome kako upravljati Systemd uslugama i jedinicama pomoću Systemctl-a.
Kontrolni popis za automatsko pokretanje za Systemd
Evo nekoliko referentnih konfiguracija koje trebate provjeriti kako biste osigurali da je vaša usluga konfigurirana za automatsko pokretanje sa Systemd-om.
- Usluga mora imati funkcionalnu Systemd init skriptu koja se nalazi na /etc/systemd/system/multi-user.target.wants/serviceName.service. ServiceName je stvarni naziv usluge koju konfigurirate.
- Naredba za omogućavanje usluge je:
|
1 |
sudo systemctl enable serviceName.service |
- Naredba stvara simboličku poveznicu u /etc/systemd/system/multi-user.target.wants/ direktoriju koji može izgledati slično kao:
|
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 tom simboličkom poveznicom na mjestu, omogućit ćete automatsko ponovno pokretanje nakon podizanja sustava.
- Za aktiviranje promjena, ponovno učitajte sistemski daemon, a zatim ponovno učitajte uslugu pomoću sljedećih naredbi:
|
1 2 3 |
sudo systemctl daemon-reload sudo systemctl restart serviceName.service |
- Da biste testirali hoće li vaše konfiguracije pokrenuti uslugu nakon ponovnog pokretanja, možete ponovno pokrenuti sustav:
|
1 |
sudo reboot |
- Kada se sustav ponovno pokrene, potražite broj procesa pomoću naredbe:
|
1 |
ps -ef | grep serviceName |
- Zabilježite broj procesa i prekinite ga pomoću naredbe:
|
1 |
sudo kill -9 process_number |
- Pričekajte nekoliko sekundi i ponovno potražite uslugu kako biste provjerili je li ponovno pokrenuta.
Praktična konfiguracija Systemd-a sa stvarnom uslugom
U ovom odjeljku pokušat ćemo konfigurirati MySQL uslugu na virtualnom stroju Ubuntu 20.04.
Korak 1: Povežite se na svoj virtualni privatni poslužitelj (Ubuntu 20.04 ili CentOS 7 x64)
Prijavite se na svoj VPS ili ga izradite s the Cloudsigma panel i povežite se pomoću ssh-a ili putty-ja ako ste na Windowsima. Za ovaj odjeljak vodiča koristimo poslužitelj Ubuntu 20.04. Iste se naredbe mogu primijeniti na CentOS 7. Obavezno koristite ne-root korisnika sa sudo privilegijama.
Korak 2: Instalirajte MySQL (uslugu koju konfiguriramo)
Prvo ažurirajte svoj sustav:
|
1 |
sudo apt update |
Zatim možete instalirati MySQL poslužitelj pomoću naredbe:
|
1 |
sudo apt install mysql-server –y |
Zatim pokrenite sljedeću naredbu kako biste započeli osiguravanje MySQL-a:
|
1 |
sudo mysql_secure_installation |
Skripta vas pita želite li postaviti komponentu VALIDATE PASSWORD ili pritisnuti bilo koje slovo za nastavak bez omogućavanja komponente. Slijedite ovu poveznicu kako biste saznali više o MySQL komponenti za provjeru valjanosti lozinke.
Pritisnite 1 da biste to omogućili, a zatim odaberite srednju razinu pritiskom na 1. Unesite jaku lozinku: kombinaciju velikih i malih slova, posebnih znakova i brojeva. Potvrdite lozinku i potvrdite upit koji vas pita želite li koristiti unesenu lozinku kao root lozinku. Za ostale upite pritisnite y kako biste ih prihvatili kao što ste to učinili u prethodnim odjeljcima. Na kraju, isperite privilegije za MySQL kako biste ponovno učitali promjene.
Korak 3: Konfigurirajte MySQL za automatsko pokretanje nakon ponovnog pokretanja
MySQL je konfiguriran da se pokrene nakon ponovnog pokretanja, tako da ne morate raditi nikakve promjene. Međutim, možemo koristiti konfiguracijske datoteke MySQL-a kako bismo naučili kako konfigurirati vlastite prilagođene datoteke.
Prvo provjerite je li MySQL usluga konfigurirana za pokretanje prilikom podizanja sustava. Unesite sljedeću naredbu (imajte na umu da se u CentOS-u MySQL usluga zove mysqld):
|
1 |
sudo systemctl is-enabled mysql.service |
Evo izlaza:

Zatim ponovno pokrenite VPS unosom sljedeće naredbe:
|
1 |
sudo reboot |
Povežite se natrag pomoću ssh-a i unesite sljedeću naredbu kako biste provjerili status MySQL usluge:
|
1 |
sudo systemctl status mysql.service |
Trebali biste dobiti izlaz sličan onome na snimci zaslona u nastavku:

Da biste onemogućili MySQL uslugu, unesite sljedeću naredbu:
|
1 |
sudo systemctl disable mysql.service |
Izlaz ukazuje na to da su simboličke poveznice na MySQL uslugu uklonjene iz Systemd-a:

Možete testirati je li usluga omogućena u Systemd init sustavu unosom sljedeće naredbe:
|
1 |
sudo systemctl is-enabled mysql.service |
Izlaz će pokazati da je onemogućena. Ako ponovno pokrenete sustav, MySQL se neće pokrenuti prilikom podizanja sustava:
![]()
Omogućite uslugu unosom sljedeće naredbe:
|
1 |
sudo systemctl enable mysql.service |
Izlaz prikazuje simboličku poveznicu na MySQL uslugu stvorenu u Systemd init-u:

Kada ponovno pokrenete sustav, MySQL usluga će se automatski pokrenuti.
Korak 4: Konfigurirajte MySQL za automatsko pokretanje nakon rušenja
MySQL je konfiguriran za automatsko ponovno pokretanje nakon rušenja. Pogledajmo kako je ova konfiguracija implementirana u Systemd-u. Systemd koristi unit datoteke za konfiguraciju. Unesite sljedeću naredbu kako biste otvorili mysql.service konfiguracijsku datoteku u nano uređivaču:
|
1 |
sudo nano /etc/systemd/system/multi-user.target.wants/mysql.service |
Izlaz izgleda ovako:

Ono što nas zanima je direktiva Restart. Prema definiciji, MySQL će se ponovno pokrenuti ako dođe do pogreške. Direktiva Restart definira što bi se trebalo dogoditi u Systemd-u, baš kao i direktiva Respawn u Upstart-u.
Nemaju sve usluge ovu direktivu. Da biste omogućili ponovno pokretanje usluge nakon rušenja, uvijek možete dodati direktivu Restart pod [Service] blokom konfiguracijske unit datoteke usluge. Ako zaglavlje [Service] ne postoji, dodajte ga. Sada izađite iz uređivača pritiskom na Ctrl + X.
Da biste simulirali rušenje, pronađite ID procesa MySQL-a unosom sljedeće naredbe:
|
1 |
sudo systemctl status mysql.service |
Naredba za provjeru statusa prikazuje ID procesa, u našem slučaju to je 3555:

Unesite sljedeću naredbu za prekid procesa. Zamijenite ga s ID-om procesa koji ste dobili na svom poslužitelju:
|
1 |
sudo kill -9 3555 |
Unesite sljedeću naredbu za provjeru statusa:
|
1 |
sudo systemctl status mysql.service |
Izlaz pokazuje da MySQL radi, ali s novim ID-om procesa. To znači da se automatski ponovno pokrenuo nakon rušenja:

Zaključak
U ovom vodiču upoznali smo vas s tri sustava inicijalizacije u Linux distribucijama: System V, Upstart i Systemd. Naučili smo kako koristiti bilo koji od init sustava za konfiguriranje vaših neprekidno pokrenutih usluga za automatsko pokretanje nakon ponovnog pokretanja ili rušenja sustava. Ovo bi vam trebalo poslužiti kao polazna točka kada trebate konfigurirati svoje usluge. Prvi dio ove serije bio je uglavnom praktični vodič. drugi dio je više teoretski i sadrži više detalja o tome što smo radili u prvom dijelu. Nemojte još brisati svoje testne poslužitelje jer ćete ih koristiti i u drugom dijelu.
Sretno računanje!
Komentari
Još nema komentara. Budite prvi.