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