Upravljanje uslugama pokretanja i skriptama na Linuxu

U ovom ćemo članku pokriti temelje upravljanja uslugama i skriptama pokretanja u Linuxu CentOS 7/8. Konkretno, analizirat ćemo osnove rada s demonom systemd, naučite dodavati usluge pokretanju i uklanjati ih odatle, a također razmislite o alternativnim opcijama za pokretanje skripti ili demona nakon pokretanja sustava.

Svrha je članka naučiti vas brzo rješavati popise usluga i skripti koje se automatski pokreću na Linuxu, dodajte svoje usluge ili skripte za pokretanje ili onemogućujete automatsko pokretanje određenih programa.

sadržaj:

  • Systemd: kontrola pokretanja usluge na Linuxu
  • Automatsko pokretanje skripti i usluga pomoću rc.local
  • Stvorite svoj vlastiti demon i dodajte ga u systemd
  • Automatsko pokretanje kroz cron
  • .bashrc: skripte za automatsko pokretanje pri pokretanju terminala

Systemd: kontrola pokretanja usluge na Linuxu

U većini popularnih, modernih, popularnih distribucija Linuxa (CentOS 7, RHEL, Debian, Fedora i Ubuntu) umjesto toga je početni demon. init.d koristi se systemd. Systemd - Linux upravitelj sustava i usluga, koji se koristi za pokretanje ostalih demona i upravljanje njima tijekom rada, koristi datoteke datoteke iz / etc / systemd / system (init.d korištene skripte iz /etc/init.d/ direktorija). Systemd vam omogućuje paralelizaciju pokretanja usluga tijekom postupka dizanja, čime se ubrzava pokretanje.

Za kontrolu sustava koristite naredbu systemctl.

Prvo ćemo nakon učitavanja sustava provjeriti popis jedinica koje su trenutno dodane systemd:

systemctl popis-jedinice

Popis jedinica jedinica može se dobiti naredbom:

systemctl spisak-jedinica-datoteke

Ova naredba prikazat će sve dostupne jedinične datoteke (bez obzira na to jesu li učitane u systemd nakon učitavanja OS-a ili ne).

Za popis aktivnih usluga i njihov status učinite:

# systemctl popis-jedinica - usluga

Sljedeća naredba popisat će jedinice koje su preuzele ili pokušale učitati systemd. Budući da nakon pokretanja neke jedinice mogu postati neaktivne, koristeći zastavu -sve dobit ćete cjelovit popis.

# systemctl popis jedinica - sve

OPIS UTICANJA AKTIVNOG PODATAKA OPIS proc-sys-fs-binfmt_misc.automatsko učitano aktivno čekanje ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ● exim.service not-found neaktivni mrtvi exim. servis firewalld.service učitava aktivni firewalld - dinamički vatrozid daemon [email protected] učitava aktivni trčanje Getty na tty1 ● ip6tables.service nije pronađen neaktivan mrtav ip6tables.service ● ipset.service nije pronađen neaktivan mrtvi ipset.service ● iptables. usluga nije pronađena neaktivna mrtva iptables.service Povezivanje / smanjivanje mreže ● NetworkManager-wait-online.service nije pronađen neaktivan mrtv 

Kao što vidite s popisa, ovdje su prikazane i usluge koje nisu pronađene na pogonu "nije pronađen"..

Pomoću ove naredbe možete dodati druge zastave, na primjer:

  • -stanje - koristi se za određivanje statusa opterećenja Load, Active, Sub
  • -vrsta - omogućuje vam filtriranje jedinica prema vrsti.

primjeri:

systemctl list-jedinice - sve - države = aktivne - prikazivat će samo aktivne jedinice

systemctl popis-jedinice -type = usluga - prikazat će se popis jedinica koje su servis.

Dodavanje usluge sustavu

Za upravljanje uslugama u sustavu systemd koristi se posebna sintaksa. Nakon što poslužitelji imena na kraju trebate navesti .usluga. Na primjer:

systemctl omogućuju nginx.service - naredba će dodati nginx web poslužitelj za automatsko učitavanje

Ova naredba će stvoriti simboličku vezu do kopije datoteke navedene u naredbi servisa u direktoriju automatskog pokretanja systemd.

# systemctl omogućuju nginx.service

Napravljeno je povezanost od /etc/systemd/system/multi-user.target.wants/nginx.service do /usr/lib/systemd/system/nginx.service
Izlaz ove naredbe pokazuje u kojoj je direktoriji stvorena veza veze do datoteke usluge.

Da biste vidjeli ovu ili onu uslugu dodanu u automatsko učitavanje, možete provjeriti njezin status:

systemctl status nginx.service

Prilikom izlaženja morate obratiti pažnju na liniju:

Opterećen: učitan (/usr/lib/systemd/system/nginx.service; omogućeno; unaprijed postavljeno dobavljač: onemogućeno)

Omogućena vrijednost znači da se ova usluga automatski učitava (dodaje se u automatsko učitavanje). Ako se usluga ne učita automatski, ovdje će biti označeno onemogućeno..

Uklanjanje usluge iz systemd

Uslugu možete ukloniti iz pokretanja tako da se ne pokrene nakon pokretanja Linuxa (dok sama usluga nije izbrisana s poslužitelja). Da biste uklonili uslugu iz pokretanja, pokrenite naredbu:

systemctl onesposobiti Need_service

Na primjer, da biste uklonili nginx iz pokretanja, učinite:

# systemctl onemogući nginx.service

Uklonjena symlink /etc/systemd/system/multi-user.target.wants/nginx.service

Nakon izvršavanja naredbe, sim-veza do uslužne datoteke bit će izbrisana iz mape systemd. Možete provjeriti je li jedinica pokrenuta:

sshd je omogućen # systemctl

Sustavno: maskiranje jedinica

U mojoj praksi postojali su "štetni" servisi koji su ih, nakon što su ih uklonili iz pokretanja, i dalje ostali i pokrenuli nakon ponovnog pokretanja OS-a. Da biste riješili taj problem, možete maskirati uslugu:

systemctl maska ​​nginx.service

I nakon toga se uopće neće pokrenuti, ručno ili nakon ponovnog pokretanja OS-a:

# systemctl maska ​​nginx.service

Izrađena simbolička veza iz /etc/systemd/system/nginx.service u / dev / null.

# ponovno pokretanje usluge nginx

Preusmjeravanje na / bin / systemctl ponovno pokretanje nginx.service Nije uspjelo ponovno pokretanje nginx.service: jedinica je maskirana.

Masku možete ukloniti naredbom:

# systemctl raskrinkavanje nginx.service

Uklonjena je symlink /etc/systemd/system/nginx.service.

Ako nakon maskiranja usluge provjerite datoteke jedinica, vidjet ćete da je usluga označena kao maskirano (maskirano stanje):

Na tako jednostavan način možete se spasiti od brisanja usluge, čak i ako ona nije uklonjena iz pokretanja systemd.

Automatsko pokretanje skripti i usluga pomoću rc.local

Najčešće se koristi za pokretanje različitih skripti prilikom dizanja Linuxa. rc.local.

Ali osim skripti, kroz rc.local možete pokrenuti i usluge, čak i one kroz koje prolaze systemd. Ne mogu odgovoriti na pitanje, zašto koristiti u ovom slučaju rc.local, ako ima systemd, ali par primjera ću dati.

Za početak, datoteku /etc/rc.local mora biti izvršno:

chmod + x /etc/rc.local

Rc.local treba dodati sistemskom pokretanju:

systemctl omogućuju rc-local

I na primjeru istog Nginx, možemo dodati rc.local naredba za pokretanje web poslužitelja:

usluga nginx start

Ali rijetko je koristim rc.local pokrenuti usluge. Češće rc.local koristi se kada trebate pokrenuti skriptu ili jednom izvršiti naredbu.

Na primjer, stvorio sam skriptu /root/test.sh koja izvodi neke radnje i želim ga pokrenuti odmah nakon pokretanja sustava. Dodajte redak u rc.local datoteku:

sh /root/test.sh

Počevši od CentOS-a 7, programeri to ističu rc.local zastarjeli demon i skripte za automatsko pokretanje ili servise kroz njega, ovo je prošlo stoljeće. No, iako djeluje, koristim ga jer je vrlo lagan za rukovanje.

Stvorite svoj vlastiti demon i dodajte ga u systemd

Možete stvoriti vlastiti demon, kojim se može kontrolirati systemd.

Na primjer, moramo pokrenuti istu skriptu /root/test.sh nakon ponovnog pokretanja sustava. Započnimo stvaranjem datoteke za našu buduću uslugu:

dodirnite /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service

Sadržaj datoteke bit će sljedeći:

[Jedinica] Opis = Usluga postavki predloška Poslije = network.target [Service] Upišite = onehot User = root ExecStart = / root / test.sh [Instaliraj] WantedBy = multi -user.target 

Ključni parametri:

Korisnik - korisnik pod kojim će se pokrenuti demon

Type = onehot - proces će biti dovršen prije pokretanja daljnjih jedinica

Provjerite i ponovno pokrenite:
# systemctl ponovno učitavanje demona
# systemctl pokrenite test-script.service
# systemctl status test-script.service

● test-script.service - testirano učitavanje: učitan (/etc/systemd/system/test-script.service; onemogućeno; unaprijed postavljeno dobavljač: onemogućeno) Aktivno: aktivno (radi) 

Ako vam je drago kako usluga radi, dodajte je da se automatski učita:

# systemctl omogućuju test-script.service

Napravljeno je povezanost od /etc/systemd/system/multi-user.target.wants/test-script.service do /etc/systemd/system/test-script.service.

Dakle, možete dodati bilo koji svoj skripta za pokretanje kroz systemd.

Automatsko pokretanje kroz cron

Ako trebate pokrenuti skriptu ili naredbu na određenoj frekvenciji, možete koristiti cron-om:

crontab -e - otvorite terminal za pisanje cron posao

I tamo dodajte zadatak koji vam je potreban, na primjer:

* * * * * /root/test.sh - pokrenite skriptu svake minute.

Možete napisati skriptu sat-pas, koji će, nakon dodjele, provjeriti, primjerice, status usluge, i ako ne radi, pokrenuti ga. Na nekoliko svojih projekata koristim sličnu shemu.

Za popis svih zadataka u krunama trebate pokrenuti naredbu:

# crontab -l

* * * * * /root/test.sh

Vrijedne vrijednosti za vrijeme početka rada cron su u redu:

  • Minute od 0 do 59
  • Sati 0 do 59
  • Dan u mjesecu od 1 do 31
  • 1. do 12. mjesec
  • Dan u tjednu 0 do 7 (0 ili 7 je nedjelja)

U našem zadatku skripta se pokreće svake minute, tako da postoje "*".

Također možete postaviti skriptu koja vam je potrebna u imenike cron:

  • /cron.daily - izvršavanje skripte dnevno
  • /cron.hourly - izvršavanje skripte po satu
  • /cron.monthly - mjesečno izvršavanje skripte
  • /cron.weekly - tjedno izvršenje skripte

Skripte u navedenom direktoriju pokreću se prema automatski pripremljenom rasporedu.

.bashrc: skripte za automatsko pokretanje pri pokretanju terminala

Ako trebate izvršiti neke radnje prilikom pokretanja terminala ssh, možete dodati bilo koju naredbu ili izvršavanje skripte .bash_profile ili .bashrc. Teoretski, bilo kojoj od ovih datoteka možete dodati bilo koju radnju, ionako će se izvršiti. Obično se dodaje sve što vam treba .bashrc, i ja .bashrc istrčati .bash_profile.

Dodao sam u datoteku .bashrc Naredba za ponovno pokretanje web usluge Nginx:

ponovno pokretanje usluge nginx

Nakon toga spremio sam datoteku i ponovo pokrenuo terminal:

Kao što vidite, prilikom pokretanja terminala ponovno se pokrenuo web poslužitelj. Koje radnje se mogu izvesti pri pokretanju terminala? Vjerojatno pokrenite neke pomoćne alate, na primjer, provjeru produženje rada poslužitelj:

Ili želite li da kada pokrenete terminal, odmah dođete do mape koja vam je potrebna i pokrenete mc, add .bashrc

CD / var /
mc

Nadam se da se ovaj članak o upravljanju pokretanjem usluga i skripti u LInuxu (članak je napisao za CentOS) pokazao korisnim za vas. Sigurno onima koji samo nauče osnove upravljanja Linux sustavom, ove će informacije biti korisne.