Správa spouštěcích služeb a skriptů v systému Linux

V tomto článku se budeme zabývat základy správy spouštěcích služeb a skriptů v systému Linux CentOS 7/8. Zejména budeme analyzovat základy práce s démonem systemd, Naučte se přidávat služby ke spuštění a odstranit je odtud, a také zvažte alternativní možnosti pro spouštění skriptů nebo démonů po spuštění systému.

Účelem tohoto článku je naučit vás rychle se vypořádat se seznamy služeb a skriptů, které běží automaticky na Linuxu, přidávat své služby nebo skripty ke spuštění, nebo deaktivovat autorun některých programů.

Obsah:

  • Systemd: řízení spouštění služby v systému Linux
  • Autostart skripty a služby pomocí rc.local
  • Vytvořte si vlastního démona a přidejte jej do systemd
  • Autostart přes cron
  • .bashrc: autostart skripty při spuštění terminálu

Systemd: řízení spouštění služby v systému Linux

Ve většině populárních, moderních a populárních distribucí Linuxu (CentOS 7, RHEL, Debian, Fedora a Ubuntu) místo spouštěcího démona init.d se používá systemd. Systemd - Linuxový správce systémů a služeb, používaný k spouštění dalších démonů a jejich správě během provozu, používá soubory jednotek z / etc / systemd / system (init.d použité skripty z adresáře /etc/init.d/). Systemd vám umožňuje paralelizovat spouštění služeb během procesu spouštění, a tím urychlit spuštění.

Chcete-li systém ovládat, použijte příkaz systemctl.

Nejprve po načtení systému zkontrolujeme seznam jednotek, které jsou aktuálně přidány systemd:

systemctl list-units

Seznam souborů jednotek lze získat příkazem:

systemctl list-unit-files

Tento příkaz zobrazí všechny dostupné soubory jednotek (bez ohledu na to, zda byly načteny) systemd po načtení OS nebo ne).

Chcete-li zobrazit aktivní služby a jejich stav, postupujte takto:

# systemctl list-units -t service

Následující příkaz zobrazí seznam jednotek, které se stáhly nebo pokusily načíst systemd. Protože po spuštění mohou být některé jednotky neaktivní pomocí vlajky -vše dostanete úplný seznam.

# systemctl list-units --all

UNIT LOAD ACTIVE SUB POPIS proc-sys-fs-binfmt_misc.automount Načíst aktivní čekání ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Exim.service nebyl nalezen neaktivní mrtvý exim. služba firewalld.service načtena aktivní spuštěný firewalld - dynamický démon firewallu [email protected] načtena aktivní spuštěna Getty na tty1 ● ip6tables.service nenalezena neaktivní mrtvá ip6tables.service ● ipset.service nenalezena neaktivní mrtvá ipset.service ● iptables. služba nenalezena neaktivní mrtvý iptables.service Přineste nahoru / dolů sítě ● NetworkManager-wait-online.service nenalezen neaktivní mrtvý 

Jak můžete vidět ze seznamu, zde se zobrazují i ​​služby, které nebyly na jednotce „nenalezeny“ nalezeny..

Pomocí tohoto příkazu můžete přidat další příznaky, například:

  • -stát - slouží k určení stavu Load, Active, Sub daemon
  • -typ - umožňuje filtrovat jednotky podle typu.

Příklady:

systemctl list-units --all --state = active - zobrazí pouze aktivní jednotky

systemctl list-units -type = service - zobrazí seznam jednotek, které jsou službou.

Přidání služby do systému

Správa služeb v systému Windows systemd používá se speciální syntaxe. Na konci pojmenujte servery .služby. Například:

systemctl povolit nginx.service - příkaz přidá webový server nginx do automatického načtení

Tento příkaz vytvoří symbolický odkaz na kopii souboru určeného v servisním příkazu v adresáři autorun systemd.

# systemctl povolit nginx.service

Vytvořen symbolický odkaz z /etc/systemd/system/multi-user.target.wants/nginx.service na /usr/lib/systemd/system/nginx.service
Výstup tohoto příkazu ukazuje, ve kterém adresáři byl vytvořen symbolický odkaz na servisní soubor.

Chcete-li zobrazit tuto nebo tu službu přidanou do automatického načtení, můžete zkontrolovat její stav:

systemctl status nginx.service

Při výstupu musíte věnovat pozornost řádku:

Načteno: načteno (/usr/lib/systemd/system/nginx.service; povoleno; předvolba dodavatele: zakázáno)

Povolená hodnota znamená, že se tato služba načítá automaticky (přidává se do automatického načtení). Pokud se služba nenačte automaticky, zde se zobrazí deaktivace..

Odebrání služby ze systému

Službu můžete odebrat ze spuštění tak, aby se nespustila po spuštění systému Linux (zatímco samotná služba nebude ze serveru odstraněna). Chcete-li odebrat službu ze spuštění, spusťte příkaz:

systemctl zakáže potřebnou službu

Chcete-li například odebrat nginx ze spuštění, postupujte takto:

# systemctl zakáže nginx.service

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

Po provedení příkazu bude symbolický odkaz na servisní soubor odstraněn z adresáře systemd. Můžete zkontrolovat, zda je jednotka v provozu:

# systemctl is-enabled sshd

Systemd: maskování jednotky

V mé praxi existovaly „škodlivé“ služby, které po jejich odstranění ze spuštění zůstaly a po restartování operačního systému byly spuštěny. Chcete-li tento problém vyřešit, můžete službu maskovat:

systemctl mask nginx.service

A poté se to vůbec nezačne, ať už ručně nebo po restartování operačního systému:

# systemctl mask nginx.service

Vytvořen symbolický odkaz z /etc/systemd/system/nginx.service do / dev / null.

# restart služby nginx

Přesměrování na / bin / systemctl restart nginx.service Selhalo restartování nginx.service: Jednotka je maskovaná.

Masku můžete odstranit příkazem:

# systemctl unmask nginx.service

Odebráno symlink /etc/systemd/system/nginx.service.

Pokud po maskování služby zkontrolujete soubory jednotky, uvidíte, že služba je označena jako maskovaná (maskovaný stav):

Tímto jednoduchým způsobem se můžete zachránit před odstraněním služby, i když není odstraněna ze spuštění systemd.

Autostart skripty a služby pomocí rc.local

Při spouštění systému Linux se nejčastěji používá ke spouštění různých skriptů. rc.local.

Ale kromě skriptů skrz rc.local můžete také provozovat služby, a to i ty, které prochází systemd. Nemohu odpovědět na otázku, proč použít v tomto případě rc.local, pokud existuje systemd, ale pár příkladů uvedu.

Nejprve soubor /etc/rc.local musí být spustitelný:

chmod + x /etc/rc.local

Rc.local by měl být přidán do startu systemd:

systemctl povolit rc-local

A na příkladu toho samého nginx, můžeme přidat rc.local příkaz spuštění webového serveru:

start služby nginx

Ale já používám jen zřídka rc.local spustit služby. Častěji rc.local Používá se, když potřebujete spustit skript nebo provést příkaz jednou.

Například jsem vytvořil skript /root/test.sh který provádí některé akce, a chci jej spustit ihned po spuštění systému. Přidejte řádek do souboru rc.local:

sh /root/test.sh

Od CentOS 7 to vývojáři zdůrazňují rc.local zastaralý démon a automatické spouštění skriptů nebo služeb, to je minulé století. Ale zatímco to funguje, používám jej, protože je velmi snadné ovládání.

Vytvořte si vlastního démona a přidejte jej do systemd

Můžete si vytvořit vlastního démona, který lze ovládat systemd.

Například musíme spustit stejný skript /root/test.sh po restartu systému. Začněme vytvořením souboru pro naši budoucí službu:

dotkněte se /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service

Obsah souboru bude následující:

[Jednotka] Popis = Nastavení šablony Service After = network.target [Service] Type = oneshot User = root ExecStart = / root / test.sh [Install] WantedBy = multususer.target 

Klíčové parametry:

Uživatel - uživatel, pod kterým bude démon spuštěn

Type = oneshot - proces bude dokončen před spuštěním dalších jednotek

Zkontrolujte a restartujte:
# systemctl daemon-reload
# systemctl start test-script.service
# systemctl status test-script.service

● test-script.service - Test Loaded: načten (/etc/systemd/system/test-script.service; disabled; preset dodavatele: disabled) Active: active (running) 

Pokud vám služba vyhovuje, přidejte ji do automatického načtení:

# systemctl povolit test-script.service

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

Můžete tedy přidat libovolný skript ke spuštění pomocí systemd.

Autostart přes cron

Pokud potřebujete spustit skript nebo příkaz na nějaké frekvenci, můžete použít cron-ohm:

crontab -e - otevřete terminál a napište úlohu cron

A přidejte tam úkol, který potřebujete, například:

* * * * * /root/test.sh - spusťte skript každou minutu.

Můžete napsat skript hlídací pes, který při přiřazení zkontroluje například stav služby, a pokud nefunguje, spustí ji. Na několika svých projektech používám podobné schéma.

Chcete-li zobrazit všechny úkoly v korunách, musíte spustit příkaz:

# crontab -l

* * * * * /root/test.sh

Platné hodnoty pro čas zahájení úloh cron jsou v pořádku:

  • Zápis 0 až 59
  • Hodiny 0 až 59
  • Den v měsíci od 1 do 31
  • 1. až 12. měsíc
  • Den v týdnu 0 až 7 (0 nebo 7 je neděle)

V našem úkolu se skript spustí každou minutu, takže existuje „*“.

Skript, který potřebujete, můžete také umístit do adresářů cron:

  • /cron.daily - spouštění skriptu denně
  • /cron.hourly - hodinové spuštění skriptu
  • /cron.monthly - měsíční spuštění skriptu
  • /cron.weekly - týdenní spuštění skriptu

Skripty v zadaném adresáři budou spuštěny podle automaticky připraveného plánu.

.bashrc: autostart skripty při spuštění terminálu

Pokud potřebujete provést některé akce při spuštění terminálu ssh, můžete přidat jakýkoli příkaz nebo spuštění skriptu .bash_profile nebo .bashrc. Teoreticky můžete do kteréhokoli z těchto souborů přidat jakoukoli akci, přesto bude provedena. Obvykle se přidá vše, co potřebujete .bashrc, a já .bashrc dojdou .bash_profile.

Přidal jsem do souboru .bashrc příkaz restart webové služby nginx:

restart služby nginx

Poté jsem soubor uložil a restartoval terminál:

Jak vidíte, při spuštění terminálu byl webový server restartován. Jaké akce lze provést při spuštění terminálu? Pravděpodobně spusťte některé pomocné nástroje, například kontrolu uptime server:

Nebo chcete, aby se při spuštění terminálu okamžitě dostanete do adresáře, který potřebujete, a spusťte mc, add to .bashrc

cd / var /
mc

Doufám, že tento článek o správě spouštění služeb a skriptů v LInuxu (článek byl napsán pro CentOS) se pro vás ukázal jako užitečný. Určitě ti, kteří se naučí pouze základy správy systému Linux, budou tyto informace užitečné.