Hvernig á að búa til og keyra nýjar þjónustueiningar í Systemd með því að nota Shell Script


Fyrir nokkrum dögum rakst ég á Centos 7 32-bita distro og ég fann löngun til að prófa það á gamalli 32-bita vél. Eftir ræsingu áttaði ég mig á því að það var galli í því og það var að missa nettenginguna, sem ég þurfti að „uppfæra“ handvirkt í hvert skipti eftir ræsingu. Þannig að spurningin var hvernig gæti ég stillt skriftu til að gera þetta starf, keyra á hverjum tíma. þegar ég ræsi vélina mína?

Jæja, þetta er mjög einfalt og ég mun sýna þér systemd-leiðina með því að nota þjónustueiningar. En fyrst smá kynning á þjónustueiningum.

Í þessari grein ætla ég að útskýra hvað þjónustueining í systemd er, hversu auðvelt er að búa til og keyra hana. Ég mun reyna að einfalda hvað markmið eru, hvers vegna við köllum þau safn af einingar“ og hverjar eru þær „viljar“. Að lokum erum við að nýta okkur þjónustueiningu til að keyra okkar eigin forskrift eftir ræsingu.

Það er augljóst að tölvan þín er gagnleg vegna þeirrar þjónustu sem hún býður upp á og til að hafa þessa virkni þarf að hringja í margar þjónustur þegar tölvan ræsir og nær mismunandi stigum. Aðrar þjónustur eru kallaðar til að framkvæma þegar tölvan nær til dæmis björgunarstigi (runlevel 0) og aðrar þegar hún nær fjölnotendastigi (runlevel 3). Þú getur ímyndað þér þessi stig sem skotmörk.

Á einfaldan hátt er markmiðið safn þjónustueininga. Ef þú vilt skoða þjónustueiningar sem keyra á graphical.target stigi þínu skaltu slá inn:

# systemctl --type=service

Eins og þú sérð eru sumar þjónustur virkar og \í gangi allan tímann, á meðan aðrar keyra einu sinni og hætta (hætt). Ef þú vilt athuga stöðu þjónustunnar skaltu slá inn:

# systemctl status firewalld.service

Eins og þú sérð athugaði ég stöðu firewalld.service (ábending: þú getur notað sjálfvirka útfyllingu fyrir nafn þjónustunnar). Það upplýsir mig um að eldveggþjónusta sé í gangi allan tímann og hún er virkjuð.

Virkt og óvirkt þýðir að þjónustan verður varanlega hlaðin eða ekki, við næstu ræsingu í sömu röð. Á hinn bóginn að hefja og stöðva þjónustu hefur takmörkun núverandi fundar og hún er ekki varanleg.

Til dæmis, ef þú skrifar:

# systemctl stop firewalld.service
# systemctl status firewalld.service

Þú getur séð að firewalld.service er óvirk (dauð) en hún er samt virk, sem þýðir að við næstu ræsingu verður hún hlaðin. Þannig að ef við viljum að þjónusta verði hlaðin á ræsitíma í framtíðinni verðum við að virkja hana. Hvílík ályktun! Við skulum búa til einn, það er auðvelt.

Ef þú ferð í möppuna:

# cd /etc/systemd/system
# ls -l

Þú getur séð nokkrar tenglaskrár einingaþjónustu og nokkrar möppur yfir \vilja marks. Til dæmis: það sem fjölnotendamarkmiðið vill að sé hlaðið þegar ræsingarferlið nær sínu stigi, er skráð í möppunni með nafni /etc/systemd/system/multi-user.target.wants/.

# ls multi-user.target.wants/

Eins og þú sérð inniheldur það ekki aðeins þjónustu heldur einnig önnur markmið sem eru líka safn þjónustu.

Gerum þjónustueiningu með nafninu tenging.þjónusta.

# vim connection.service

og sláðu inn eftirfarandi (smelltu á \i fyrir innsetningarstillingu), vistaðu það og farðu út (með \esc og \:wq!< /kóði> ):

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

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

[Install]
WantedBy = multi-user.target

Til að útskýra ofangreint: við höfum búið til einingu af þjónustutegund (þú getur líka búið til einingar af markgerð), við höfum stillt hana til að hlaða hana á eftir network.target (þú getur skilið að ræsingarferlið nær markmiðunum með skilgreindu order) og við viljum í hvert sinn sem þjónustan byrjar að keyra bash forskrift með nafninu conup.sh sem við ætlum að búa til.

Fjörið byrjar með síðasta hlutanum [install]. Það segir að það verði eftirsótt af \multi-user.target. Þannig að ef við virkum þjónustuna okkar verður táknrænn hlekkur á þá þjónustu búinn til í multi-user.target.wants möppunni! Skilurðu? Og ef við slökkva það verður tenglinum eytt. Svo einfalt.

Virkjaðu það bara og athugaðu:

# systemctl enable connection.service

það upplýsir okkur um að táknræni hlekkurinn í multi-user.target.wants möppunni hafi verið búinn til. Skoðaðu það:

# ls multi-user.target.wants/

Eins og þú sérð er \connection.service tilbúið fyrir næstu ræsingu, en við verðum að búa til skriftuskrána fyrst.

# cd /root
# mkdir scripts
# cd scripts
# vim conup.sh

Bættu við eftirfarandi línu inni í vim og vistaðu hana:

#!/bin/bash
nmcli connection up enp0s3

Auðvitað ef þú vilt að handritið þitt keyri eitthvað annað gætirðu slegið inn hvað sem þú vilt í staðinn fyrir aðra línuna.

Til dæmis,

#!/bin/bash
touch /tmp/testbootfile

sem myndi búa til skrá í /tmp möppunni (bara til að athuga hvort þjónustan þín virki).

Við verðum líka að gera handritið keyranlegt:

# chmod +x conup.sh

Nú erum við tilbúin. Ef þú vilt ekki bíða eftir næstu ræsingu (það er nú þegar virkt) getum við ræst þjónustuna fyrir núverandi lotu og skrifað:

# systemctl start connection.service

Voila! Tengingin mín er í gangi!

Ef þú hefur valið að skrifa skipunina snertu /tmp/testbootfile inni í handritinu, bara til að athuga virkni þess, muntu sjá þessa skrá búin til í /tmp möppunni.

Ég vona virkilega að geta hjálpað þér að finna út hvaða þjónustur, óskir, markmið og keyrsla forskrifta við ræsingu snýst um.