Správa spúšťacích služieb a skriptov v systéme Linux

V tomto článku sa budeme zaoberať základmi správy spúšťacích služieb a skriptov v systéme Linux CentOS 7/8. Analyzujeme najmä základy práce s démonom systemd, Naučte sa pridávať služby na spustenie a odstrániť ich odtiaľ, a tiež zvážiť alternatívne možnosti pre spúšťanie skriptov alebo démonov po spustení systému.

Účelom tohto článku je naučiť vás rýchlo sa zoznámiť so zoznamami služieb a skriptov, ktoré sa spúšťajú automaticky v systéme Linux, pridať svoje služby alebo skripty na spustenie alebo zakázať automatické spúšťanie určitých programov..

obsah:

  • Systemd: riadenie spustenia služby v systéme Linux
  • Automatické spúšťanie skriptov a služieb pomocou rc.local
  • Vytvorte si vlastného démona a pridajte ho do systemd
  • Automatické spustenie cez cron
  • .bashrc: automatické štartovanie skriptov pri štarte terminálu

Systemd: riadenie spustenia služby v systéme Linux

Vo väčšine populárnych, moderných a populárnych distribúcií Linuxu (CentOS 7, RHEL, Debian, Fedora a Ubuntu) namiesto toho ako spúšťací démon. init.d sa používa systemd. systemd - Manažér systémov a služieb Linux, používaný na spúšťanie ďalších démonov a ich správu počas prevádzky, používa súbory jednotiek z / etc / systemd / system (init.d používa skripty z adresára /etc/init.d/). Systemd vám umožňuje paralelizovať spúšťanie služieb počas procesu zavádzania, čím sa urýchľuje spúšťanie.

Na ovládanie systému použite príkaz systemctl.

Najprv po načítaní systému skontrolujeme zoznam jednotiek, ktoré sú aktuálne pridané systemd:

systemctl list-units

Zoznam súborov jednotiek je možné získať príkazom:

systemctl list-unit-files

Tento príkaz zobrazí všetky dostupné súbory jednotiek (bez ohľadu na to, či boli načítané) systemd po načítaní OS alebo nie).

Ak chcete zobraziť zoznam aktívnych služieb a ich stav, postupujte takto:

# systemctl list-units -t service

Nasledujúci príkaz zobrazí zoznam jednotiek, ktoré sa stiahli alebo sa pokúsili načítať systemd. Keďže po spustení môžu byť niektoré jednotky neaktívne, používajú vlajku -všetko dostanete kompletný zoznam.

# systemctl list-units --all

UNIT LOAD ACTIVE SUB POPIS proc-sys-fs-binfmt_misc.automount naložené aktívne čakanie ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Exim.service nenájdené neaktívne mŕtve exim. služba firewalld.service načítaná aktívna prevádzka firewalld - dynamická démon firewall [email protected] načítaná aktívna prevádzka Getty na tty1 ● ip6tables.service nenájdená neaktívna mŕtvy ip6tables.service ● ipset.service nenájdená neaktívna mŕtvy ipset.service ● iptables. služba nenájdená neaktívne mŕtve iptables.service Prinášajte sieťové pripojenia ● NetworkManager-wait-online.service nenájdené neaktívne mŕtve 

Ako vidíte zo zoznamu, tu sa zobrazujú aj služby, ktoré sa nenašli na jednotke „nenájdené“..

Pomocou tohto príkazu môžete pridať ďalšie príznaky, napríklad:

  • -stáť - Používa sa na určenie stavu Load, Active, Sub daemon
  • -typ - umožňuje filtrovať jednotky podľa typu.

príklady:

systemctl list-units --all --state = active - zobrazí iba aktívne jednotky

systemctl list-units -type = service - zobrazí zoznam jednotiek, ktoré sú službou.

Pridanie služby do systému

Spravovať služby v systéme Windows 7 systemd používa sa špeciálna syntax. Nakoniec je potrebné zadať názvy serverov .služba. Napríklad:

systemctl povoľte nginx.service - príkaz pridá webový server nginx do automatického načítania

Tento príkaz vytvorí symbolický odkaz na kópiu súboru špecifikovaného v servisnom príkaze v adresári autorun systemd.

# systemctl povoľte nginx.service

Vytvorený symbolický odkaz z /etc/systemd/system/multi-user.target.wants/nginx.service na /usr/lib/systemd/system/nginx.service
Výstup tohto príkazu ukazuje, v ktorom adresári bol vytvorený symbolický odkaz na súbor služieb.

Ak chcete vidieť, že táto alebo táto služba bola pridaná do automatického načítania, môžete skontrolovať jej stav:

systemctl status nginx.service

Pri výstupe musíte venovať pozornosť riadku:

Načítané: načítané (/usr/lib/systemd/system/nginx.service; povolené; predvoľba dodávateľa: deaktivovaná)

Povolená hodnota znamená, že táto služba sa načíta automaticky (pridá sa k automatickému načítaniu). Ak sa služba nenačíta automaticky, tu sa zobrazí indikácia deaktivácie..

Odstránenie služby zo systému

Službu môžete odstrániť zo spustenia, aby sa nespustila po spustení systému Linux (zatiaľ čo samotná služba sa neodstráni zo servera). Ak chcete odstrániť službu zo spustenia, spustite príkaz:

systemctl zakáže potrebné_služby

Ak chcete napríklad odstrániť nginx zo spustenia, postupujte takto:

# systemctl zakáže nginx.service

Odstránený symbolický odkaz /etc/systemd/system/multi-user.target.wants/nginx.service

Po vykonaní príkazu sa symbolický odkaz na súbor služieb odstráni z adresára systemd. Môžete skontrolovať, či je jednotka v prevádzke:

# systemctl je povolený sshd

Systemd: maskovanie jednotiek

V mojej praxi existovali „škodlivé“ služby, ktoré aj po odstránení zo spustenia tam zostali a spustili sa po reštarte OS. Na vyriešenie tohto problému môžete maskovať službu:

systemctl mask nginx.service

A potom sa vôbec nespustí, ani manuálne, ani po reštarte OS:

# systemctl mask nginx.service

Vytvorený symbolický odkaz z /etc/systemd/system/nginx.service do / dev / null.

# reštart služby nginx

Presmerovanie na / bin / systemctl restart nginx.service Nepodarilo sa reštartovať nginx.service: Jednotka je maskovaná.

Masku môžete odstrániť pomocou príkazu:

# systemctl unmask nginx.service

Odstránená služba symlink /etc/systemd/system/nginx.service.

Ak po maskovaní služby skontrolujete súbory jednotiek, uvidíte, že služba je označená ako maskovaná (maskovaný stav):

Týmto jednoduchým spôsobom sa môžete zachrániť pred odstránením služby, aj keď nie je odstránená zo spustenia systemd.

Automatické spúšťanie skriptov a služieb pomocou rc.local

Najčastejšie sa používa pri spúšťaní rôznych skriptov pri zavádzaní systému Linux. rc.local.

Ale okrem skriptov aj cez rc.local môžete tiež prevádzkovať služby, dokonca aj tie, ktoré prechádzajú systemd. Nemôžem odpovedať na otázku, prečo použiť v tomto prípade rc.local, ak existuje systemd, ale uvediem niekoľko príkladov.

Ak chcete začať, súbor /etc/rc.local musí byť spustiteľný:

chmod + x /etc/rc.local

Rc.local by sa mal pridať do spustenia systémud:

systemctl povoliť rc-local

A na príklade toho istého Nginx, môžeme pridať rc.local príkaz na spustenie webového servera:

spustenie služby nginx

Ale ja používam len zriedka rc.local spustiť služby. Častejšie rc.local Používa sa, keď potrebujete spustiť skript alebo vykonať príkaz raz.

Napríklad som vytvoril skript /root/test.sh ktorý vykonáva niektoré činnosti, a chcem ho spustiť okamžite po spustení systému. Pridajte riadok do súboru rc.local:

sh /root/test.sh

Od CentOS 7 to vývojári zdôrazňujú rc.local zastaraný démon a automatické spúšťanie skriptov alebo služieb prostredníctvom tohto, toto je minulé storočie. Ale aj keď to funguje, používam ho, pretože je veľmi ľahko ovládateľný.

Vytvorte si vlastného démona a pridajte ho do systemd

Môžete si vytvoriť svojho vlastného démona, prostredníctvom ktorého môžete ovládať systemd.

Napríklad musíme spustiť rovnaký skript /root/test.sh po reštarte systému. Začnime vytvorením súboru pre našu budúcu službu:

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

Obsah súboru bude nasledovný:

[Jednotka] Opis = Služba nastavenia šablóny po = network.target [Služba] Typ = oneshot Používateľ = root ExecStart = / root / test.sh [Inštalovať] WantedBy = multususer.target 

Kľúčové parametre:

Používateľ - používateľ, pod ktorým bude démon spustený

Type = oneshot - proces bude dokončený pred spustením ďalších jednotiek

Skontrolujte a reštartujte:
# systemctl daemon-reload
# systemctl start test-script.service
# systemctl status test-script.service

● test-script.service - Test Loaded: načítaný (/etc/systemd/system/test-script.service; disabled; predvoľba dodávateľa: disabled) Active: active (running) 

Ak ste spokojní s tým, ako služba funguje, pridajte ju do automatického načítania:

# systemctl povoliť test-script.service

Vytvorený symbolický odkaz z /etc/systemd/system/multi-user.target.wants/test-script.service na /etc/systemd/system/test-script.service.

Môžete teda pridať ktorýkoľvek zo skriptov na spustenie pomocou systemd.

Automatické spustenie cez cron

Ak potrebujete spustiť skript alebo príkaz na určitej frekvencii, môžete použiť cron-om:

crontab -e - otvorte terminál a napíšte úlohu cron

A tam pridajte úlohu, ktorú potrebujete, napríklad:

* * * * * /root/test.sh - spustite skript každú minútu.

Môžete napísať skript strážny pes, ktorý pri zadaní skontroluje napríklad stav služby a ak to nefunguje, spustí sa. Na niektorých svojich projektoch používam podobnú schému.

Ak chcete zobraziť všetky úlohy v korunách, musíte spustiť príkaz:

# crontab -l

* * * * * /root/test.sh

Platné hodnoty pre počiatočný čas úloh cron sú v poriadku:

  • Zápisnica 0 až 59
  • Hodiny 0 až 59
  • Deň v mesiaci od 1 do 31
  • 1. až 12. mesiac
  • Deň v týždni 0 až 7 (0 alebo 7 je nedeľa)

V našej úlohe sa skript spúšťa každú minútu, takže existuje „*“.

Skript, ktorý potrebujete, môžete tiež umiestniť do adresárov cron:

  • /cron.daily - vykonávanie skriptov denne
  • /cron.hourly - hodinové vykonanie skriptu
  • /cron.mesiac - mesačné vykonanie skriptu
  • /cron.weekly - týždenné vykonávanie skriptov

Skripty v zadanom adresári sa budú spúšťať podľa automaticky pripraveného plánu.

.bashrc: automatické štartovanie skriptov pri štarte terminálu

Ak potrebujete vykonať nejaké kroky pri spustení terminálu ssh, môžete pridať akýkoľvek príkaz alebo vykonanie skriptu .bash_profile alebo .bashrc. Teoreticky môžete do ľubovoľného z týchto súborov pridať ľubovoľnú akciu, napriek tomu sa vykoná. Spravidla sa pridá všetko, čo potrebujete .bashrc, a ja .bashrc dôjdu .bash_profile.

Pridal som do súboru .bashrc príkaz na reštart webovej služby Nginx:

reštart služby nginx

Potom som uložil súbor a reštartoval terminál:

Ako vidíte, pri spustení terminálu sa webový server reštartoval. Aké akcie je možné vykonať pri spustení terminálu? Pravdepodobne spustite niektoré pomocné programy, napríklad kontrolu uptime server:

Alebo chcete, aby sa pri spustení terminálu okamžite dostali do adresára, ktorý potrebujete, a spustite mc, add to .bashrc

cd / var /
mc

Dúfam, že tento článok o riadení spúšťania služieb a skriptov v LInux (článok bol napísaný pre CentOS) sa ukázal byť užitočným pre vás. Určite tí, ktorí sa naučia iba základy správy systému Linux, budú tieto informácie užitočné.