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.serviceIzhod 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.