Kif Oħloq u Tmexxi Unitajiet ta' Servizz Ġodda f'Systemd billi tuża Shell Script


Ftit jiem ilu, iltqajt ma' distro Centos 7 32-bit u ħassejt ix-xewqa li nittestjaha fuq magna antika ta '32-bit. Wara l-ibbutjar indunajt li kellu bug u kien qed jitlef il-konnessjoni tan-netwerk, li kelli ndawwruha \up manwalment kull darba wara l-ibbutjar. Għalhekk, il-mistoqsija kienet kif stajt nissettja script li nagħmel dan ix-xogħol, billi nħaddem kull darba. ħin I boot-magna tiegħi?

Ukoll, dan huwa sempliċi ħafna u jien ser nuruk il-mod systemd bl-użu ta 'unitajiet ta' servizz. Iżda l-ewwel introduzzjoni żgħira għall-unitajiet tas-servizz.

F'dan l-artikolu, ser nispjega x'inhi \unità ta' servizz f'systemd, kemm hu faċli li toħloq u tmexxi waħda. Se nipprova nissimplifika x'inhuma \miri, għaliex insejħulhom \kollezzjonijiet ta' unitajiet u x'inhuma \jixtieq. Fl-aħħarnett qed nieħdu vantaġġ minn unità ta 'servizz biex inħaddmu l-iskript tagħna stess wara l-proċedura tal-boot.

Huwa ovvju li l-kompjuter tiegħek huwa utli minħabba s-servizzi li joffri u sabiex ikollu din il-funzjonalità, ħafna servizzi jridu jissejħu bħala l-boots tal-kompjuter u jilħqu livelli differenti. Servizzi oħra huma msejħa biex jiġu eżegwiti meta l-kompjuter jilħaq pereżempju l-livell ta’ salvataġġ (runlevel 0) u oħrajn meta jilħaq il-livell multi-user (runlevel 3). Tista 'timmaġina dawn il-livelli bħala miri.

B'mod sempliċi mira hija ġabra ta 'unitajiet ta' servizz. Jekk trid tagħti ħarsa lejn l-unitajiet tas-servizz li qed jaħdmu fil-livell graphical.target tiegħek, ittajpja:

# systemctl --type=service

Kif tistgħu taraw xi servizzi huma attivi u \jħaddmu il-ħin kollu, filwaqt li oħrajn jaħdmu darba u jtemmu (ħruġ). Jekk trid tiċċekkja l-istatus ta' servizz, ikteb:

# systemctl status firewalld.service

Kif tistgħu taraw ivverifikajt l-istatus ta' firewalld.service (ponta: tista' tuża l-awto-kompleta għall-isem tas-servizz). Tgħarrafni li s-servizz firewalld qed jaħdem il-ħin kollu u huwa attivat.

Enabled u disabled ifisser li s-servizz se jitgħabba b'mod permanenti jew le, waqt il-boot li jmiss rispettivament. Min-naħa l-oħra li tibda u twaqqaf servizz għandha l-limitazzjoni tas-sessjoni preżenti u mhix permanenti.

Per eżempju, jekk ittajpja:

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

Tista 'tara li l-firewalld.service huwa inattiv (mejjet) iżda għadu attivat, li jfisser li matul il-boot li jmiss se jitgħabba. Mela jekk irridu li servizz jitgħabba waqt il-ħin tal-ibbutjar fil-futur irridu nippermettuh. X’konklużjoni kbira! Ejja noħolqu waħda, huwa faċli.

Jekk tmur fil-folder:

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

Tista 'tara xi link files ta' servizzi ta 'unità u xi direttorji tal-\jixtieq ta' mira. Per eżempju: dak li l-mira multi-user trid titgħabba meta l-proċedura boot tilħaq il-livell tagħha, huwa elenkat fid-direttorju bl-isem /etc/systemd/system/multi-user.target.wants/.

# ls multi-user.target.wants/

Kif tistgħu taraw ma fihx biss servizzi iżda wkoll miri oħra li huma wkoll kollezzjonijiet ta’ servizzi.

Ejja nagħmlu unità ta 'servizz bl-isem connection.service.

# vim connection.service

u ittajpja dan li ġej (agħfas \i” għall-modalità daħħal), issalvaha u oħroġ (b'\esc u \:wq!):

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

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

[Install]
WantedBy = multi-user.target

Biex tispjega dan t'hawn fuq: ħloqna unità ta 'tip ta' servizz (tista 'wkoll toħloq unitajiet ta' tip ta 'mira), waqqafna biex titgħabba wara n-network.target (tista' tifhem li l-proċedura tal-ibbutjar tilħaq il-miri b'mod definit. ordni) u rridu kull darba li s-servizz jibda jesegwixxi script bash bl-isem conup.sh li se noħolqu.

Il-gost jibda bl-aħħar parti [installa]. Jgħid li se jkun imfittex minn \multi-user.target. Mela jekk nippermettu s-servizz tagħna tinħoloq link simboliku għal dak is-servizz ġewwa l-folder multi-user.target.wants! Ghandna? U jekk inwaqqfu hija dik il-link se titħassar. Hekk sempliċi.

Ippermettiha biss u ċċekkja:

# systemctl enable connection.service

jinfurmana li l-link simboliku fil-folder multi-user.target.wants inħoloq. Iċċekkjaha:

# ls multi-user.target.wants/

Kif tistgħu taraw \connection.service” hija lesta għall-ibbutjar li jmiss, iżda l-ewwel irridu noħolqu l-iscript file.

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

Żid il-linja li ġejja ġewwa vim u ssalvaha:

#!/bin/bash
nmcli connection up enp0s3

Naturalment jekk trid li l-iskrittura tiegħek tesegwixxi xi ħaġa oħra, tista' ttajpja dak kollu li trid minflok it-tieni linja.

Pereżempju,

#!/bin/bash
touch /tmp/testbootfile

li joħloq fajl ġewwa /tmp folder (biss biex tivverifika li s-servizz tiegħek qed jaħdem).

Irridu wkoll nagħmlu l-iskritt eżekutibbli:

# chmod +x conup.sh

Issa aħna lesti. Jekk ma tridx tistenna sal-boot li jmiss (diġà hija attivata) nistgħu nibdew is-servizz għas-sessjoni attwali ttajpja:

# systemctl start connection.service

Voila! Il-konnessjoni tiegħi qed taħdem!

Jekk għażilt li tikteb il-kmand \touch /tmp/testbootfile ġewwa l-iskript, biss biex tiċċekkja l-funzjonalità tiegħu, se tara dan il-fajl maħluq ġewwa /tmp folder.

Tassew nittama li ngħinek issib x'inhuma s-servizzi, xewqat, miri u skripts li jmexxu waqt l-ibbutjar.