Upravljanje zagonskih storitev in skriptov v Linuxu

V tem članku bomo obravnavali osnove upravljanja zagonskih storitev in skriptov v Linuxu CentOS 7/8. Predvsem bomo analizirali osnove dela z demonom sistemd, naučite se dodajati storitve za zagon in jih odstraniti od tam, prav tako razmislite o drugih možnostih za zagon skriptov ali demonov po zagonu sistema.

Namen članka je naučiti, da hitro ugotovite sezname storitev in skriptov, ki se samodejno zaženejo v Linuxu, dodate svoje storitve ali skripte za zagon ali onemogočite samodejno zagon določenih programov.

Vsebina:

  • Systemd: nadzor zagona storitve v Linuxu
  • Samodejni zagon skriptov in storitev z uporabo rc.local
  • Ustvarite svoj demon in ga dodajte v sistemd
  • Samodejni zagon skozi cron
  • .bashrc: skripte za samodejni zagon ob zagonu terminala

Systemd: nadzor zagona storitve v Linuxu

V večini priljubljenih, modernih, priljubljenih distribucij Linuxa (CentOS 7, RHEL, Debian, Fedora in Ubuntu) so namesto tega zagonski daemon init.d se uporablja sistemd. Sistemsko - Linux sistem in upravitelj storitev, ki se uporablja za zagon drugih demonov in upravljanje z njimi med delovanjem, uporablja enotne datoteke iz / etc / systemd / system (init.d uporabljeni skripti iz imenika /etc/init.d/). Systemd vam omogoča, da vzporedite zagon storitev med zagonskim postopkom in s tem pospešite zagon.

Za nadzor sistema uporabite ukaz systemctl.

Najprej bomo po nalaganju sistema preverili seznam enot, ki so trenutno dodane sistemd:

seznam-enote sistemctl

Seznam datotek enot lahko dobite z ukazom:

systemctl spisovne enote datotek

Ta ukaz prikaže vse datoteke, ki so na voljo (ne glede na to, ali so bile naložene v sistemd po nalaganju OS ali ne).

Če želite seznam aktivnih storitev in njihov status narediti:

# systemctl seznam-enote -t ​​storitev

Naslednji ukaz bo seznam enot, ki so jih naložile ali poskušale naložiti sistemd. Po zagonu lahko nekatere enote z uporabo zastave postanejo neaktivne -vse dobili boste popoln seznam.

# systemctl seznam-enote - vse

OPIS OBLOGE OBLOGE OBLIKOVANJA PROCES-sys-fs-binfmt_misc.automount naloženo aktivno čakanje ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ● exim.service ni najden neaktiven mrtvi eksim. storitev firewalld.service naložena aktivni teče požarni zid - dinamični požarni zid daemon [email protected] je naložen aktivni tek Getty na tty1 ● ip6tables.service ni mogoče najti neaktivnega mrtvega ip6tables.service ● ipset.service ni mogoče najti neaktivnega mrtvega ipset.service ● iptables. storitve ni mogoče najti neaktivnega mrtvega iptables.service Povežite / znižajte omrežje ● NetworkManager-čakaj-na spletu.service ni mogoče najti 

Kot je razvidno s seznama, so tukaj prikazane celo storitve, ki niso bile najdene na pogonu »ni najden«..

S tem ukazom lahko dodate druge zastave, na primer:

  • -država - ki se uporablja za določanje statusa nalaganja Load, Active, Sub
  • -tip - omogoča filtriranje enot po vrstah.

Primeri:

sistemske enote seznamov - vse - države = aktivne - bo seznam samo aktivnih enot

systemctl seznam-enote -type = storitev - prikaže seznam enot, ki so storitev.

Dodajanje storitve v sistemd

Za upravljanje storitev v sistemd uporablja se posebna skladnja. Ko poimenske strežnike na koncu morate določiti .storitev. Na primer:

systemctl omogočite nginx.service - ukaz bo dodal spletni strežnik nginx za samodejno nalaganje

Ta ukaz bo ustvaril simbolično povezavo do kopije datoteke, podane v ukazu storitve v imeniku zagon sistemd.

# systemctl omogočite nginx.service

Ustvaril je povezavo iz /etc/systemd/system/multi-user.target.wants/nginx.service v /usr/lib/systemd/system/nginx.service
Izhod tega ukaza prikazuje, v katerem imeniku je bila ustvarjena povezava do storitvene datoteke.

Če si želite ogledati to ali to storitev, dodano samodejnemu nalaganju, lahko preverite njeno stanje:

systemctl status nginx.service

Pri oddajanju morate biti pozorni na vrstico:

Naloženo: naloženo (/usr/lib/systemd/system/nginx.service; omogočeno; prednastavitev prodajalca: onemogočena)

Omogočena vrednost pomeni, da se ta storitev samodejno naloži (doda se za samodejno nalaganje). Če se storitev ne naloži samodejno, bo tu prikazana onemogočena..

Odstranjevanje storitve iz sistema

Storitev lahko odstranite iz zagona, tako da se ne zažene po zagonu Linuxa (medtem ko sama storitev ni izbrisana iz strežnika). Če želite storitev odstraniti iz zagona, zaženite ukaz:

sistemctl onemogoči potrebni_service

Na primer, če želite odstraniti nginx iz zagona, naredite:

# systemctl onemogoči nginx.service

Odstranjena je povezava /etc/systemd/system/multi-user.target.wants/nginx.service

Ko se ukaz izvede, se sim-povezava do storitvene datoteke iz imenika izbriše sistemd. Lahko preverite, ali je enota v zagonu:

# systemctl je omogočen sshd

Sistem: maskiranje enot

V moji praksi so obstajali "škodljivi" servisi, ki so jih po odstranitvi iz zagona še vedno tam in začeli po ponovnem zagonu OS. Če želite rešiti to težavo, lahko storitev prikrijete:

systemctl maska ​​nginx.service

In po tem se sploh ne bo začel ročno ali po ponovnem zagonu OS:

# systemctl maska ​​nginx.service

Ustvaril je povezavo iz /etc/systemd/system/nginx.service v / dev / null.

# storitev znova zaženite nginx

Preusmeritev na / bin / systemctl ponovno zagon nginx.service Ponovni zagon nginx.service ni uspel: enota je zamaskirana.

Masko lahko odstranite z ukazom:

# systemctl odkrite nginx.service

Odstranjena je bila povezava /etc/systemd/system/nginx.service.

Če po maskiranju storitve preverite datoteke enote, boste videli, da je storitev označena kot zamaskirana (v maskiranem stanju):

Na tako preprost način se lahko rešite pred izbrisom storitve, tudi če je ta ni odstranjen iz zagona sistemd.

Samodejni zagon skriptov in storitev z uporabo rc.local

Najpogosteje se uporablja za zagon različnih skript pri zagonu Linuxa. rc.local.

Toda poleg skriptov, skozi rc.local lahko zaženete tudi storitve, tudi tiste, ki tečejo skozi sistemd. Ne morem odgovoriti na vprašanje, zakaj uporabljati v tem primeru rc.local, če obstaja sistemd, ampak nekaj primerov bom dal.

Za začetek datoteko /etc/rc.local mora biti izvedljivo:

chmod + x /etc/rc.local

Rc.local je treba dodati sistemski zagon:

systemctl omogočiti rc-local

In na primeru istega nginx, lahko dodamo rc.local ukaz za zagon spletnega strežnika:

storitev nginx start

A redko uporabljam rc.local za zagon storitev. Pogosteje rc.local se uporablja, ko morate zagnati skript ali enkrat izvršiti ukaz.

Na primer, ustvaril sem scenarij /root/test.sh ki izvaja nekaj dejanj, in želim ga zagnati takoj po zagonu sistema. Dodajte vrstico v datoteko rc.local:

sh /root/test.sh

Začenši s CentOS 7, razvijalci to poudarjajo rc.local zastarel demonski skript ali samodejni zagon skriptov ali storitev prek njega, to je zadnje stoletje. A čeprav deluje, ga uporabljam, saj je zelo enostaven za upravljanje.

Ustvarite svoj demon in ga dodajte v sistemd

Lahko ustvarite svoj demon, ki ga lahko nadzirate skozi sistemd.

Za primer moramo zagnati isti skript /root/test.sh po ponovnem zagonu sistema. Začnimo z ustvarjanjem datoteke za našo prihodnjo storitev:

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

Vsebina datoteke bo naslednja:

[Enota] Opis = Nastavitev predloge Service After = network.target [Service] Type = oneshot Uporabnik = root ExecStart = / root / test.sh [Namestitev] WantedBy = multi-user.target 

Ključni parametri:

Uporabnik - uporabnik, pod katerim bo demontiran

Type = onehot - postopek bo končan pred zagonom nadaljnjih enot

Preverite in znova zaženite:
# systemctl daemon-reload
# systemctl zaženite test-script.service
# systemctl status test-script.service

● test-script.service - Test Loaded: load (/etc/systemd/system/test-script.service; onemogočeno; prednastavitev ponudnika: onemogočeno) Active: active (deluje) 

Če ste zadovoljni s tem, kako storitev deluje, ji dodajte samodejno nalaganje:

# systemctl omogoči test-script.service

Ustvaril je povezavo iz /etc/systemd/system/multi-user.target.wants/test-script.service v /etc/systemd/system/test-script.service.

Tako lahko dodate kateri koli svoj skript za zagon prek systemd.

Samodejni zagon skozi cron

Če morate zagnati skript ali ukaz ob določeni frekvenci, lahko uporabite kron-ohm:

krontab -e - odprite terminal za pisanje naloge cron

In dodajte nalogo, ki jo potrebujete tam, na primer:

* * * * * /root/test.sh - zaženite skript vsako minuto.

Lahko napišete scenarij čuvaj, ki ob dodelitvi preveri na primer stanje storitve in jo, če ne deluje, zažene. Pri več svojih projektih uporabljam podobno shemo.

Če želite našteti vsa opravila v kronah, morate zagnati ukaz:

# crontab -l

* * * * * /root/test.sh

Veljavne vrednosti za čas začetka nalog cron so v vrstnem redu:

  • Minute od 0 do 59
  • Ure od 0 do 59
  • Dan v mesecu od 1 do 31
  • 1. do 12. mesec
  • Dan v tednu od 0 do 7 (0 ali 7 je nedelja)

V naši nalogi se skript izvaja vsako minuto, zato obstajajo "*".

Skript, ki ga potrebujete, lahko postavite tudi v imenike kron:

  • /cron.daily - vsakodnevno izvajanje skripta
  • /cron.hourly - izvedba skripta na uro
  • /cron.monthly - mesečno izvajanje skripta
  • /cron.weekly - tedensko izvajanje skripta

Skripti v določenem imeniku se bodo izvajali po samodejno pripravljenem urniku.

.bashrc: skripte za samodejni zagon ob zagonu terminala

Če morate zagnati nekaj dejanj pri zagonu terminala ssh, lahko dodate kateri koli ukaz ali skript .bash_profile ali .bashrc. Teoretično lahko kateri koli od teh datotek dodate katero koli dejanje, vseeno se bo izvedlo. Običajno se doda vse, kar potrebujete .bashrc, in jaz .bashrc zmanjkalo .bash_profile.

Dodala sem v datoteko .bashrc Ukaz za ponovni zagon spletne storitve nginx:

servis nginx znova zaženite

Po tem sem datoteko shranil in znova zagnal terminal:

Kot lahko vidite, je bil ob zagonu terminala znova zagnan spletni strežnik. Katera dejanja je mogoče izvesti pri zagonu terminala? Verjetno zaženite nekatere pomožne pripomočke, na primer preverjanje podaljšek strežnik:

Ali pa želite, da ko zaženete terminal, takoj pridete do želenega imenika in zaženete mc, add to .bashrc

CD / var /
mc

Upam, da se je ta članek o upravljanju zagona storitev in skriptov v LInuxu (članek je bil napisan za CentOS) izkazal za vas uporabnega. Zagotovo bodo tisti podatki, ki se le naučijo osnov upravljanja sistema Linux, koristni.