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.serviceVý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é.