Indítási szolgáltatások és szkriptek kezelése Linuxon

Ebben a cikkben bemutatjuk az indítási szolgáltatások és a szkriptek kezelésének alapjait a Linux CentOS 7/8 rendszeren. Különösen a démonnal való munka alapjait elemezzük systemd, megtanulja, hogyan adhat hozzá szolgáltatásokat az indításhoz és eltávolítja őket onnan, valamint fontolja meg a szkriptek vagy démonok futtatásának alternatív lehetőségeit is a rendszer indítása után.

A cikk célja, hogy megtanítsa Önnek gyorsan kezelni a Linuxon automatikusan futó szolgáltatások és szkriptek listáit, hozzáadni a szolgáltatásokat vagy szkripteket az indításhoz, vagy letiltani egyes programok automatikus futtatását..

Tartalom:

  • Rendszeres: szolgáltatás indításának vezérlése Linux rendszeren
  • Autostart szkriptek és szolgáltatások az rc.local használatával
  • Hozzon létre saját démont, és vegye fel a rendszerbe
  • Automatikus indítás a cronon keresztül
  • .bashrc: automatikus indítású szkriptek a terminál indításakor

Rendszeres: szolgáltatás indításának vezérlése Linux rendszeren

A legtöbb népszerű, modern, népszerű Linux disztribúcióban (CentOS 7, RHEL, Debian, Fedora és Ubuntu) indítási démonként init.d használják systemd. systemd - A Linux rendszer- és szolgáltatáskezelő, más démonok elindításához és üzemeltetés közben történő kezeléséhez, az / etc / systemd / system egységfájlokat használ (az init.d használt szkriptek az /etc/init.d/ könyvtárból). A Systemd lehetővé teszi a szolgáltatások indításának párhuzamosítását a rendszerindítási folyamat során, ezáltal felgyorsítva az indítást.

A rendszer vezérléséhez használja a parancsot systemctl.

Először, a rendszer betöltése után megvizsgáljuk az egységek listáját, amelyekhez jelenleg hozzáadunk systemd:

systemctl listaegységek

Az egységfájlok listája a következő paranccsal szerezhető be:

systemctl listaegység-fájlok

Ez a parancs megjeleníti az összes elérhető egység fájlt (függetlenül attól, hogy be vannak-e töltve systemd az operációs rendszer betöltése után vagy sem).

Az aktív szolgáltatások és állapotuk felsorolásához tegye a következőket:

# systemctl list-units -t szolgáltatás

A következő parancs felsorolja azokat az egységeket, amelyek letöltöttek vagy megkíséreltek betölteni systemd. Mivel az indítás után néhány egység inaktívvá válhat a zászló használatával -minden kap egy teljes listát.

# systemctl listaegységek - minden

AZ EGYSÉG TERMÉKE AKTÍV ALKALMAZÁSI LEÍRÁS proc-sys-fs-binfmt_misc.automount betöltve aktív várakozás ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ● Az Exim.service nem található inaktív halott exim. service firewalld.service betöltve aktív futó tűzfal - dinamikus tűzfal démon [email protected] betöltve aktív futással Getty on tty1 ● ip6tables.service nem található inaktív halott ip6tables.service ● ipset.service nem található inaktív halott ipset.service ● iptable. szolgáltatás nem található inaktív halott iptables.service Hálózat fel- és lefelé helyezése ● NetworkManager-wait-online.service nem található inaktív halott 

Mint látható a listából, még azok a szolgáltatások is megjelennek, amelyek nem találhatóak a "nem található" meghajtón..

Ezzel a paranccsal további jelzőket is felvehet, például:

  • -állami - a Load, Active, Sub démon állapotának meghatározására szolgál
  • -típus - lehetővé teszi az egységek típus szerinti szűrését.

példák:

systemctl listaegységek - minden - állam = aktív - csak az aktív egységeket sorolja fel

systemctl list-units -type = service - megjeleníti a szolgáltatásnak minősülő egységek listáját.

Szolgáltatás hozzáadása a systemd-hez

Szolgáltatások kezelése a systemd speciális szintaxist használunk. A végén a névszerverek után meg kell adnia .szolgáltatás. Például:

A systemctl engedélyezi az nginx.service szolgáltatást - a parancs hozzáadja az nginx webszervert az automatikus betöltéshez

Ez a parancs szimbolikus hivatkozást hoz létre az autorun könyvtár szolgáltatási parancsában megadott fájl másolatához systemd.

# systemctl engedélyezze az nginx.service szolgáltatást

Készített symlink az /etc/systemd/system/multi-user.target.wants/nginx.service könyvtárból az /usr/lib/systemd/system/nginx.service oldalhoz
A parancs kimenete megmutatja, hogy mely könyvtárban jött létre a szolgáltatásfájlhoz mutató hivatkozás.

Ha látni szeretné, hogy ez vagy a szolgáltatás hozzáadódik az automatikus betöltésekor, ellenőrizheti annak állapotát:

systemctl nginx.service állapot

A kimenetnél figyelni kell a sorra:

Betöltve: betöltve (/usr/lib/systemd/system/nginx.service; engedélyezve; előre beállított eladó: letiltva)

Az engedélyezett érték azt jelenti, hogy ez a szolgáltatás automatikusan betöltődik (hozzáadódik az automatikus betöltése). Ha a szolgáltatás nem töltődik be automatikusan, itt jelenik meg a letiltott..

Szolgáltatás eltávolítása a rendszerből

Távolíthatja el a szolgáltatást az indításkor, hogy nem indul el a Linux indulása után (míg maga a szolgáltatás nem törlődik a szerverről). Egy szolgáltatás eltávolításához az indításkor futtassa a következő parancsot:

a systemctl letiltja a szükséges_szolgáltatást

Például az nginx eltávolításához az indításkor tegye a következőket:

# systemctl letiltja az nginx.service szolgáltatást

Eltávolítva a symlink /etc/systemd/system/multi-user.target.wants/nginx.service

A parancs végrehajtása után a szolgáltatásfájlhoz tartozó hivatkozás törlődik a könyvtárból systemd. Ellenőrizheti, hogy az egység indul-e:

# systemctl engedélyezve van az sshd

Rendszeres: egység maszkolás

Gyakorlatomban voltak olyan „káros” szolgáltatások, amelyek eltávolítása után az indításból továbbra is ott maradtak, és az operációs rendszer újraindítása után elindultak. A probléma megoldásához elrejtheti a szolgáltatást:

systemctl mask nginx.service

És utána egyáltalán nem indul el, sem kézzel, sem az operációs rendszer újraindítása után:

# systemctl maszk nginx.service

Létrehozott hivatkozást az /etc/systemd/system/nginx.service könyvtárból a / dev / null könyvtárba.

# service nginx újraindítás

Átirányítás a / bin / systemctl újraindításra az nginx.service szolgáltatásra Nem sikerült az nginx.service újraindítása: Az egység maszkolt.

A maszkot a következő paranccsal távolíthatja el:

# systemctl unmask nginx.service

Eltávolítva a symlink /etc/systemd/system/nginx.service.

Ha a szolgáltatás maszkolása után ellenőrzi az egység fájlokat, akkor látni fogja, hogy a szolgáltatást maszkoltként jelölik (maszkolt állapot):

Ilyen egyszerű módon megmentheti magát a szolgáltatás törlésétől, még akkor is, ha azt nem távolítja el az indításkor systemd.

Autostart szkriptek és szolgáltatások az rc.local használatával

Leggyakrabban különféle szkriptek futtatásához használják a Linux indításakor. rc.local.

De a szkriptek mellett, keresztül rc.local szolgáltatásokat is futtathat, még azokat is, amelyek futnak át systemd. Nem tudom megválaszolni azt a kérdést, miért érdemes ebben az esetben használni rc.local, ha van systemd, de néhány példát adok.

Először is, a fájl /etc/rc.local végrehajthatónak kell lennie:

chmod + x /etc/rc.local

Az Rc.local értéket hozzá kell adni a rendszeres indításhoz:

A systemctl lehetővé teszi az rc-local használatát

És ugyanezen példán nginx, be tudjuk adni rc.local webszerver indítási parancs:

szolgáltatás nginx indítása

De ritkán használom rc.local a szolgáltatások indításához. Gyakrabban rc.local akkor használható, ha szkriptet kell futtatnia, vagy egyszer kell végrehajtania egy parancsot.

Például létrehoztam egy szkriptet /root/test.sh amely bizonyos műveleteket hajt végre, és a rendszer indítása után azonnal el akarom indítani. Adja hozzá a sort az rc.local fájlhoz:

sh / root/test.sh

A CentOS 7-től kezdve a fejlesztők rámutatnak erre rc.local elavult démon és automatikus indítású parancsfájlok vagy rajta keresztüli szolgáltatások, ez a múlt század. De miközben működik, használom, mivel nagyon könnyű kezelni.

Hozzon létre saját démont, és vegye fel a rendszerbe

Készíthet saját démont, amelyet ezen keresztül vezérelhet systemd.

Például ugyanazt a szkriptet kell futtatnunk /root/test.sh a rendszer újraindítása után. Kezdjük azzal, hogy létrehozunk egy fájlt a jövőbeli szolgáltatásunkhoz:

érintse meg az /etc/systemd/system/test-script.service elemet
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service

A fájl tartalma a következő:

[Egység] Leírás = Sablonbeállítások Szolgáltatás után = network.target [Szolgáltatás] Típus = oneshot Felhasználó = root ExecStart = / root / test.sh [Install] WantedBy = multi-user.target 

Főbb paraméterek:

Felhasználó - az a felhasználó, aki alatt a démon elindul

Type = oneshot - a folyamat befejeződik a további egységek indítása előtt

Ellenőrizze és indítsa újra:
# systemctl démon-újratöltés
# systemctl indítsa el a test-script.service szolgáltatást
# systemctl status test-script.service

● test-script.service - Test Loaded: betöltve (/etc/systemd/system/test-script.service; letiltva; eladó preset: letiltva) Aktív: aktív (fut) 

Ha jól ismeri a szolgáltatás működését, add hozzá az automatikus betöltése:

# systemctl engedélyezi a test-script.service szolgáltatást

Készített symlink az /etc/systemd/system/multi-user.target.wants/test-script.service könyvtárból az /etc/systemd/system/test-script.service oldalhoz.

Így bármilyen szkriptet hozzáadhat az indításhoz a rendszeren keresztül.

Automatikus indítás a cronon keresztül

Ha szkriptet vagy parancsot kell futtatnia valamilyen gyakorisággal, akkor használhatja cron-om:

crontab -e - nyisson meg egy terminált egy cron feladat írásához

És adja hozzá a szükséges feladatot, például:

* * * * * / gyökér / tesztelés - futtassa a szkriptet percenként.

Írhat szkriptet watch-dog, amely a hozzárendeléskor ellenőrzi például egy szolgáltatás állapotát, és ha nem működik, akkor elindítja. Több projektnél hasonló sémát alkalmazok.

Az összes feladat koronában történő felsorolásához futtassa a következő parancsot:

# crontab -l

* * * * * / gyökér / tesztelés

A cron feladatok kezdési idejének érvényes értékei a következőképpen vannak rendezve:

  • 0–59 perc
  • Órák 0–59
  • A hónap napja 1 és 31 között
  • 1–12. Hónap
  • A hét napja 0–7 (0 vagy 7 vasárnap)

Feladatunkban a szkript percenként fut, tehát vannak "*".

A szükséges szkriptet a könyvtárakba is elhelyezheti cron:

  • /cron.daily - szkriptfuttatás naponta
  • /cron.hourly - szkript végrehajtása óránként
  • /cron.monthly - havi szkriptfuttatás
  • /cron.weekly - heti szkriptfuttatás

A megadott könyvtár parancsfájljai az automatikusan elkészített ütemezés szerint futnak.

.bashrc: automatikus indítású szkriptek a terminál indításakor

Ha a terminál indításakor végre kell hajtania néhány műveletet ssh, bármilyen parancsot vagy szkriptfuttatást hozzáadhat a .bash_profile vagy .bashrc. Elméletileg bármilyen műveletet felvehet ezekhez a fájlokhoz, ezt a program végrehajtja. Általában mindent hozzáadnak, amire szüksége van .bashrc, és magam .bashrc elfogy .bash_profile.

Felvettem a fájlt .bashrc webszolgáltatás újraindítási parancs nginx:

service nginx restart

Ezután elmentettem a fájlt és újraindítottam a terminált:

Mint látható, a terminál indításakor a webszervert újraindították. Milyen műveleteket lehet végrehajtani a terminál indításakor? Valószínűleg futtasson néhány segédprogramot, például ellenőrzést uptime szerver:

Vagy azt akarja, hogy a terminál elindításakor azonnal elérje a szükséges könyvtárat, és futtassa az mc-t, add hozzá .bashrc

CD / var /
mc

Remélem, hogy ez a cikk a szolgáltatások és szkriptek indításának kezeléséről a LInux-ban (a cikk a CentOS számára készült) hasznosnak bizonyult az Ön számára. Természetesen azok, akik csak a Linux rendszer adminisztrációjának alapjait tanulják meg, ezek az információk hasznosak lesznek.