Jinsi ya Kuunda na Kuendesha Vitengo Vipya vya Huduma katika Mfumo kwa Kutumia Hati ya Shell


Siku chache zilizopita, nilikutana na distro ya Centos 7 32-bit na nilihisi hamu ya kuijaribu kwenye mashine kuu ya 32-bit. Baada ya kuwasha niligundua kuwa ilikuwa na hitilafu na ilikuwa inapoteza muunganisho wa mtandao, ambayo ilinibidi kuiwasha up mwenyewe kila wakati baada ya kuwasha.Kwa hivyo, swali lilikuwa ni jinsi gani ningeweza kuweka hati inayofanya kazi hii, inayoendesha kila wakati mimi Boot mashine yangu?

Kweli, hii ni rahisi sana na nitakuonyesha njia ya mfumo kwa kutumia vitengo vya huduma. Lakini kwanza utangulizi mdogo wa vitengo vya huduma.

Katika makala haya, nitaelezea kitengo cha huduma katika systemd ni nini, jinsi ilivyo rahisi kuunda na kuendesha moja. Nitajaribu kurahisisha lengo ni nini, kwa nini tunaziita \makusanyo ya vitengo na mahitaji yao ni nini. Hatimaye tunachukua fursa ya kitengo cha huduma kuendesha hati yetu wenyewe baada ya utaratibu wa kuwasha.

Ni dhahiri kwamba kompyuta yako ni muhimu kutokana na huduma inazotoa na ili kuwa na utendakazi huu, huduma nyingi zinapaswa kuitwa kama buti za kompyuta na kufikia viwango tofauti. Huduma zingine huitwa kutekelezwa wakati kompyuta inafika kwa mfano kiwango cha uokoaji (runlevel 0) na zingine inapofikia kiwango cha watumiaji wengi (runlevel 3). Unaweza kufikiria viwango hivi kama malengo.

Kwa njia rahisi lengo ni mkusanyiko wa vitengo vya huduma. Ikiwa ungependa kuangalia vitengo vya huduma vinavyoendesha katika kiwango chako cha graphical.target, andika:

# systemctl --type=service

Kama unavyoona baadhi ya huduma ni amilifu na \zinaendesha wakati wote, huku zingine zikitumia mara moja na kuzima (zimetoka). Ikiwa unataka kuangalia hali ya huduma, andika:

# systemctl status firewalld.service

Kama unavyoona niliangalia hali ya firewalld.service (kidokezo: unaweza kutumia kukamilisha kiotomatiki kwa jina la huduma). Inanifahamisha kuwa huduma ya firewalld inafanya kazi wakati wote na imewezeshwa.

Ikiwashwa na kuzimwa inamaanisha kuwa huduma itapakiwa kabisa au la, wakati wa kuwasha tena mtawalia. Kwa upande mwingine kuanza na kusimamisha huduma kuna kizuizi cha kipindi hiki na sio cha kudumu.

Kwa mfano, ukiandika:

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

Unaweza kuona kwamba firewalld.service haijatumika (imekufa) lakini bado imewezeshwa, ambayo ina maana kwamba wakati wa kuwasha ijayo itapakiwa. Kwa hivyo ikiwa tunataka huduma kupakiwa wakati wa kuwasha katika siku zijazo lazima tuwashe. Hitimisho zuri kama nini! Wacha tuunde moja, ni rahisi.

Ukienda kwenye folda:

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

Unaweza kuona baadhi ya faili za kiungo za huduma za kitengo na baadhi ya saraka za anataka ya lengo. Kwa mfano: kile lengo la watumiaji wengi linataka kupakiwa wakati utaratibu wa kuwasha ufikia kiwango chake, kimeorodheshwa kwenye saraka yenye jina. /etc/systemd/system/multi-user.target.wants/.

# ls multi-user.target.wants/

Kama unavyoona haina huduma tu bali pia malengo mengine ambayo pia ni makusanyo ya huduma.

Hebu tufanye kitengo cha huduma kwa jina connection.service.

# vim connection.service

na uandike ifuatayo (gonga \i kwa modi ya kuingiza), ihifadhi na uondoke (kwa \esc na \:wq! ):

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

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

[Install]
WantedBy = multi-user.target

Ili kuelezea hapo juu: tumeunda kitengo cha aina ya huduma (unaweza pia kuunda vitengo vya aina ya lengo), tumeiweka ili kupakiwa baada ya mtandao.target (unaweza kuelewa kwamba utaratibu wa uanzishaji unafikia malengo na iliyoelezwa. order) na tunataka kila wakati huduma inapoanza kutekeleza hati ya bash iliyo na jina conup.sh ambalo tutaunda.

Burudani huanza na sehemu ya mwisho [sakinisha]. Inasema kuwa itatakiwa na lengo la watumiaji wengi. Kwa hivyo ikiwa tutawezesha huduma yetu kiungo cha mfano kwa huduma hiyo kitaundwa ndani ya folda ya watumiaji wengi.target.wants! Umeelewa? Na ikiwa tutazima kiungo hicho kitafutwa. Rahisi sana.

Washa tu na uangalie:

# systemctl enable connection.service

inatufahamisha kwamba kiungo cha ishara katika folda ya multi-user.target.wants kimeundwa. Angalia:

# ls multi-user.target.wants/

Kama unavyoona \connection.service iko tayari kwa ajili ya kuanza upya, lakini lazima tuunde faili ya hati kwanza.

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

Ongeza laini ifuatayo ndani ya vim na uihifadhi:

#!/bin/bash
nmcli connection up enp0s3

Kwa kweli ikiwa unataka hati yako kutekeleza kitu kingine, unaweza kuandika chochote unachotaka badala ya safu ya pili.

Kwa mfano,

#!/bin/bash
touch /tmp/testbootfile

ambayo inaweza kuunda faili ndani /tmp folda (ili tu kuangalia kuwa huduma yako inafanya kazi).

Lazima pia tufanye hati itekelezwe:

# chmod +x conup.sh

Sasa tuko tayari. Iwapo hutaki kusubiri hadi kiwasho kifuatacho (tayari kimewashwa) tunaweza kuanzisha huduma ya kuandika kipindi cha sasa:

# systemctl start connection.service

Voila! Muunganisho wangu unaendelea na unaendelea!

Ikiwa umechagua kuandika amri \gusa /tmp/testbootfile ndani ya hati, ili tu kuangalia utendakazi wake, utaona faili hii imeundwa ndani ya /tmp folda.

Ninatumai sana kukusaidia kujua ni huduma gani, anataka, shabaha na hati zinazoendesha wakati wa uanzishaji zinahusu.