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