Weboldal keresés

Új szolgáltatási egységek létrehozása és futtatása a Systemd-ben


Néhány napja találkoztam egy Centos 8 32 bites disztribúcióval, és éreztem, hogy szeretném kipróbálni egy régi 32 bites gépen. A rendszerindítás után rájöttem, hogy hiba van benne, és megszakad a hálózati kapcsolat, amit minden alkalommal manuálisan kellett „fel” kapcsolnom. Tehát a kérdés az volt, hogyan tudnék beállítani egy szkriptet, amely ezt a feladatot végezze el, minden alkalommal, amikor elindítom a gépemet?

Nos, ez nagyon egyszerű, és megmutatom a rendszer módját a szervizegységek használatával. De először egy kis bevezetés a szervizegységekbe.

Ebben a cikkben elmagyarázom, mi az a „szolgáltatási egység” a systemd-ben, és milyen egyszerű létrehozni és futtatni. Megpróbálom leegyszerűsíteni, hogy mik a „célok”, miért nevezzük őket „egységgyűjteménynek”, és mik a „kívánságaik”. Végül kihasználunk egy szolgáltatási egységet saját szkriptünk futtatására a rendszerindítási eljárás után.

Nyilvánvaló, hogy a számítógépe hasznos az általa kínált szolgáltatások miatt, és ahhoz, hogy ez a funkció elérhető legyen, számos szolgáltatást meg kell hívni, amikor a számítógép elindul, és különböző szinteket ér el.

Más szolgáltatások végrehajtása akkor történik meg, amikor a számítógép eléri például a mentési szintet (0. futási szint), másokat pedig akkor, amikor eléri a többfelhasználós szintet (3. futási szint) . Ezeket a szinteket elképzelheti célpontként.

Egyszerű módon a cél szolgáltatási egységek gyűjteménye. Ha meg szeretné tekinteni a graphical.target szinten futó szolgáltatási egységeket, írja be:

systemctl --type=service

Amint láthatja, egyes szolgáltatások aktívak és folyamatosan „futnak”, míg mások egyszer futnak, és megszűnnek (kilépnek).

Ha ellenőrizni szeretné egy szolgáltatás állapotát, használhatja a systemctl parancsot az ábrán látható módon.

systemctl status firewalld.service

Amint láthatja, ellenőriztem a firewall.service állapotát (tipp: használhatja az automatikus kiegészítést a szolgáltatás nevéhez ). Értesít, hogy a tűzfal szolgáltatás folyamatosan fut, és engedélyezve van.

Az engedélyezve és letiltva azt jelenti, hogy a szolgáltatás a következő rendszerindítás során véglegesen betöltődik vagy sem. Másrészt a szolgáltatás elindítása és leállítása a jelenlegi munkamenet korlátozásával jár, és ez nem állandó.

Például, ha beírja:

systemctl stop firewalld.service
systemctl status firewalld.service

Látható, hogy a firewall.service inaktív (halott), de továbbra is engedélyezve van, ami azt jelenti, hogy a következő rendszerindításkor betöltődik. Tehát ha azt akarjuk, hogy egy szolgáltatás a jövőben a rendszerindítás során betöltődik, engedélyeznünk kell azt. Milyen nagyszerű következtetés! Hozzunk létre egyet, ez egyszerű.

Ha a mappába lép:

cd /etc/systemd/system
ls -l

Megtekintheti az egységszolgáltatások linkfájljait, valamint a cél „ akarja ” könyvtárait. Például az, hogy mit szeretne betölteni a többfelhasználós cél, amikor a rendszerindítási eljárás eléri a szintjét, a /etc/systemd/system/multi-user.target.wants/ nevű könyvtárban szerepel. .

ls multi-user.target.wants/

Amint láthatja, nem csak szolgáltatásokat tartalmaz, hanem más célokat is, amelyek szintén szolgáltatásgyűjtemények.

Készítsünk szolgáltatási egységet connection.service néven.

vim connection.service

és írja be a következőt (nyomja le az “i ” billentyűt a beszúrási módhoz), mentse el, és lépjen ki (az “esc ” és “:wq! ” ) parancsokkal ) :

[Unit]
Description = making network connection up
After = network.target

[Service]
ExecStart = /root/scripts/conup.sh

[Install]
WantedBy = multi-user.target

A fentiek magyarázatára: létrehoztunk egy szolgáltatástípus egységet (létrehozhatunk céltípusú egységeket is), és beállítottuk, hogy a network.target után töltsön be (érthető, hogy a a rendszerindítási eljárás meghatározott sorrendben éri el a célokat), és azt szeretnénk, hogy minden alkalommal, amikor a szolgáltatás elindul, egy conup.sh nevű bash szkriptet hozzon létre.

A móka az utolsó résszel kezdődik, [telepítés]. Azt mondja, hogy a "multi-user.target" ezt fogja kérni. Tehát ha engedélyezzük szolgáltatásunkat, akkor a multi-user.target.wants mappában szimbolikus hivatkozás jön létre a szolgáltatásra! Megvan? És ha letiltjuk, az a link törlődik. Olyan egyszerű.

Csak engedélyezze, és ellenőrizze:

systemctl enable connection.service

Tájékoztat bennünket, hogy létrejött a szimbolikus hivatkozás a multi-user.target.wants mappában. Megerősítheti az ls parancs futtatásával az ábrán látható módon.

ls multi-user.target.wants/

Amint láthatja, a "connection.service " készen áll a következő rendszerindításra, de először létre kell hoznunk a szkriptfájlt.

cd /root
mkdir scripts
cd scripts
vim conup.sh

Adja hozzá a következő sort a Vim-hez, és mentse el:

#!/bin/bash
nmcli connection up enp0s3

Az nmcli parancs az enp0s3 interfész hálózati kapcsolatának megjelenítéséhez.

Természetesen, ha azt szeretné, hogy a szkript valami mást hajtson végre, akkor a második sor helyett azt írja be, amit akar.

Például,

#!/bin/bash
touch /tmp/testbootfile

amely létrehoz egy fájlt a /tmp mappában (csak annak ellenőrzésére, hogy a szolgáltatás működik-e).

A szkriptet futtathatóvá kell tennünk a chmod parancs futtatásával is, az ábra szerint.

chmod +x conup.sh

Most készen vagyunk. Ha nem szeretne várni a következő rendszerindításig (az már engedélyezve van), elindíthatjuk a szolgáltatást az aktuális munkamenethez a következő beírásával:

systemctl start connection.service

Voálá! A kapcsolatom működik és működik!

Ha úgy döntött, hogy beírja a "touch /tmp/testbootfile" parancsot a szkriptbe, csak a működésének ellenőrzése érdekében, akkor ez a fájl a /tmp mappában fog megjelenni. .

Nagyon remélem, hogy segíthetek kitalálni, miről szól a szolgáltatások, az igények, a célok és a szkriptek futtatása a rendszerindítás során.