Wéi erstellen a lafen nei Service Eenheeten am Systemd mat Shell Skript


Virun e puer Deeg sinn ech op e Centos 7 32-Bit Distro komm an ech hunn de Wonsch gefillt et op enger aler 32-Bit Maschinn ze testen. Nom Booten hunn ech gemierkt datt et e Feeler hat an et verléiert d'Netzverbindung, wat ech all Kéier nom Boot muss manuell opmaachen.Also, d'Fro war wéi konnt ech e Skript setzen fir dës Aarbecht ze maachen, all Kéier lafen. Zäit ech Stiwwel meng Maschinn?

Gutt, dëst ass ganz einfach an ech weisen Iech de Systemd-Wee mat Serviceunitéiten. Awer éischt eng kleng Aféierung an Service Unitéiten.

An dësem Artikel wäert ech erkläre wat eng \Service-Eenheet\ am Systemd ass, wéi einfach eng ze kreéieren an ze bedreiwen. Unitéiten a wat sinn hir Wënsch. Endlech profitéiere mir vun enger Serviceunitéit fir eisen eegene Skript no der Bootprozedur auszeféieren.

Et ass offensichtlech datt Äre Computer nëtzlech ass wéinst de Servicer déi et ubitt a fir dës Funktionalitéit ze hunn, musse vill Servicer genannt ginn wéi de Computer boott an erreecht verschidden Niveauen. Aner Servicer ginn opgeruff fir auszeféieren wann de Computer zum Beispill de Rettungsniveau erreecht (Runlevel 0) an anerer wann et de Multi-User Niveau erreecht (Runlevel 3). Dir kënnt dës Niveauen als Ziler virstellen.

Op eng einfach Manéier Zil ass eng Sammlung vun Service Unitéiten. Wann Dir wëllt e Bléck op d'Service-Eenheeten op Ärem graphical.target-Niveau lafen, tippt:

# systemctl --type=service

Wéi Dir gesitt, sinn e puer Servicer aktiv a \laafen déi ganzen Zäit, anerer lafen eemoleg a terminéieren (ausgaang). Wann Dir de Status vun engem Service wëllt iwwerpréiwen, tippt:

# systemctl status firewalld.service

Wéi Dir gesitt, hunn ech de Status vum firewalld.service iwwerpréift (Tipp: Dir kënnt den Auto-Komplett fir den Numm vum Service benotzen). Et informéiert mech datt de Firewalld Service déi ganzen Zäit leeft an et ass aktivéiert.

Aktivéiert an behënnert heescht datt de Service permanent gelueden gëtt oder net, respektiv beim nächste Boot. Op der anerer Säit fir e Service unzefänken an ze stoppen huet d'Begrenzung vun der aktueller Sessioun an et ass net permanent.

Zum Beispill, wann Dir schreift:

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

Dir kënnt gesinn datt de firewalld.service inaktiv (dout) ass, awer et ass nach ëmmer aktivéiert, dat heescht datt et beim nächste Boot geluede gëtt. Also wa mir wëllen datt e Service an der Zukunft während der Bootzäit gelueden gëtt, musse mir et aktivéieren. Wat eng flott Conclusioun! Loosst eis een erstellen, et ass einfach.

Wann Dir an den Dossier gitt:

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

Dir kënnt e puer Linkdateien vun Eenheetsservicer an e puer Verzeichnisser vun de \wëllen vun engem Zil gesinn. Zum Beispill: wat de Multi-User Zil gelueden wëllt wann d'Bootprozedur säin Niveau erreecht, ass am Verzeechnes mam Numm opgelëscht /etc/systemd/system/multi-user.target.wants/.

# ls multi-user.target.wants/

Wéi Dir gesitt, enthält et net nëmmen Servicer, awer och aner Ziler déi och Sammlunge vu Servicer sinn.

Loosst eis eng Service Eenheet mam Numm connection.service maachen.

# vim connection.service

a gitt déi folgend (hit \i fir den Insert-Modus), späichert et a gitt eraus (mat \esc an \:wq! ):

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

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

[Install]
WantedBy = multi-user.target

Fir déi uewe genannte z'erklären: Mir hunn eng Eenheet vum Servicetyp erstallt (Dir kënnt och Unitéiten vum Ziltyp erstellen), mir hunn et gesat fir no der network.target gelueden ze ginn (Dir kënnt verstoen datt d'Bootprozedur d'Ziler erreecht mat engem definéierten Uerdnung) a mir wëllen all Kéier wann de Service ufänkt e Bash-Skript mam Numm conup.sh auszeféieren, dee mir erstellen.

De Spaass fänkt mam leschten Deel [installéieren]. Et erzielt datt et vum multi-user.target gewënscht gëtt. Also wa mir eise Service aktivéieren, gëtt e symbolesche Link op dee Service am Multi-user.target.wants Dossier erstallt! Gitt et? A wa mir deaktivéieren et gëtt dee Link geläscht.So einfach.

Aktivéiert et einfach a kontrolléiert:

# systemctl enable connection.service

et informéiert eis datt de symbolesche Link am Multi-user.target.wants Dossier erstallt gouf. Check et:

# ls multi-user.target.wants/

Wéi Dir gesitt connection.service ass prett fir de nächste Boot, awer mir mussen d'Skriptdatei als éischt erstellen.

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

Füügt déi folgend Linn bannent vim a späichert se:

#!/bin/bash
nmcli connection up enp0s3

Natierlech wann Dir wëllt datt Äre Skript eppes anescht ausféiert, kënnt Dir aschreiwen wat Dir wëllt anstatt déi zweet Zeil.

Zum Beispill,

#!/bin/bash
touch /tmp/testbootfile

dat géif eng Datei am/tmp Dossier erstellen (just fir ze kontrolléieren ob Äre Service funktionnéiert).

Mir mussen och de Skript ausféierbar maachen:

# chmod +x conup.sh

Elo si mir prett. Wann Dir net wëllt waarden bis de nächste Boot (et ass scho aktivéiert) kënne mir de Service fir déi aktuell Sessioun tippen starten:

# systemctl start connection.service

Voila! Meng Verbindung ass op a leeft!

Wann Dir gewielt hutt de Kommando touch /tmp/testbootfile am Skript ze schreiwen, just fir seng Funktionalitéit ze kontrolléieren, gesitt Dir dës Datei erstallt am /tmp Dossier.

Ech hoffen wierklech Iech ze hëllefen erauszefannen wat fir Servicer, Wënsch, Ziler a Lafen Scripte beim Booten alles ass.