Intshayelelo
Xa uphuhlisa iLinux, umsebenzi wokudala izikripthi ezisebenzisanayo ezenziwayo xa inkqubo ilayitiwe okanye ivaliwe ivela. Kwinkqubo V oku bekulula, kodwa nge-systemd yenza uhlengahlengiso. Kodwa inokuba namaxesha ayo.
Kutheni sifuna iithagethi?
Kuhlala kubhaliwe ukuba ithagethi isebenza njenge-analogue yomphakamo wokuqhuba kwinkqubo ye-V -init. Andivumi ngokusisiseko. Kukho ezininzi zazo kwaye unokwahlula iipakethe ngokwamaqela kwaye, umzekelo, uqalise iqela leenkonzo ngomyalelo omnye kwaye wenze izenzo ezongezelelweyo. Ngaphezu koko, abanalo ulawulo, baxhomekeke kuphela.
Umzekelo wethagethi xa yenziwe (umboniso wefetsha) usebenzisa iscript esisebenzisanayo
Inkcazelo ekujoliswe kuyo ngokwayo:
cat installer.target
[Unit]
Description=My installer
Requires=multi-user.target
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target
AllowIsolate=yes
Wants=installer.service
Oku kujoliswe kuko kuyakuqala xa i-multi-user.target isungulwa kwaye ifowunela i-installer.service. Nangona kunjalo, kunokubakho iinkonzo ezininzi ezinjalo.
cat installer.service
[Unit]
# ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅
Description=installer interactive dialog
[Service]
# ΠΠ°ΠΏΡΡΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎ
Type=idle
# ΠΠΎΠΌΠ°Π½Π΄Π° Π·Π°ΠΏΡΡΠΊΠ° - Π²ΡΠ·ΠΎΠ² ΡΠΊΡΠΈΠΏΡΠ°
ExecStart=/usr/bin/installer.sh
# ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΠ΅ΡΠ΅Π· tty3
StandardInput=tty
TTYPath=/dev/tty3
TTYReset=yes
TTYVHangup=yes
[Install]
WantedBy=installer.target
Kwaye ekugqibeleni, umzekelo weskripthi owenziweyo:
#!/bin/bash
# ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ Π² tty3
chvt 3
echo "Install, y/n ?"
read user_answer
Eyona nto ibaluleke kakhulu kukukhetha final.target - ekujoliswe kuyo apho inkqubo kufuneka ifike ekuqaleni. Ngexesha lenkqubo yokuqalisa, i-systemd iya kuhamba ngokuxhomekeka kwaye iqalise yonke into eyifunayo.
Kukho iindlela ezahlukeneyo zokukhetha i-final.target, ndisebenzise ukhetho lomlayishi wale nto.
Imveliso yokugqibela ibonakala ngolu hlobo:
- I-bootloader iyaqala
- I-bootloader iqala ukuqalisa i-firmware ngokudlula i-final.target parameter
- Systemd iqala inkqubo yokuqalisa. Ngokulandelelana iya kwi-installer.target okanye work.target ukusuka kwi-basic.target ngokuxhomekeka kwabo (umzekelo, i-multi-user.target). Le yokugqibela izisa inkqubo ukusebenza ngendlela efunwayo.
Ukulungiselela i-firmware ukuqaliswa
Xa udala i-firmware, umsebenzi uhlala uvela ngokubuyisela inkqubo yenkqubo ekuqaleni kwaye uyigcine xa uvala. I-State ithetha iifayile zoqwalaselo, ukulahlwa kwedathabheyisi, useto lwe-interface, njl.
I-Systemd iqhuba iinkqubo kwithagethi efanayo ngokunxuseneyo. Kukho ukuxhomekeka okukuvumela ukuba umisele ulandelelwano lokuqalisa lwezikripthi.
Isebenza njani kwiprojekthi yam (
- Inkqubo iyaqala
- Inkonzo ye-setting_restore.service iqalisiwe.Ijonga ubukho beesethingi.txt ifayile kwicandelo ledatha. Ukuba ayikho, ngoko ke ifayile yereferensi ibekwe endaweni yayo Ngokulandelayo, useto lwenkqubo lubuyiselwe:
- igama lokugqithisa lomlawuli
- igama lomamkeli,
- ixesha lendawo
- indawo
- Imisela ukuba ngaba zonke imidiya ziyasetyenziswa. Ngokungagqibekanga, ubungakanani bomfanekiso buncinci - ukwenza kube lula ukukopa kunye nokurekhoda kwimidiya. Ekuqaliseni, ijonga ukubona ukuba kusekho indawo engasetyenziswanga. Ukuba kukho, idiski iyahlulwa.
- Ukuvelisa umatshini-id ukusuka kwidilesi ye-MAC. Oku kubalulekile ukufumana idilesi efanayo nge-DHCP
- Iisetingi zenethiwekhi
- Inciphisa ubungakanani belog
- I-drive yangaphandle ilungiselelwa umsebenzi (ukuba ukhetho oluhambelanayo lwenziwe kwaye i-drive entsha)
- Qala i-postgresq
- Inkonzo yokubuyisela iyaqala. Kuyafuneka ukulungiselela i-zabbix ngokwayo kunye nedatha yayo:
- Ijonga ukuba ngaba sele ikhona idatabase yezabbix. Ukuba akunjalo, yenziwe ngokuqalisa ukulahla (kubandakanywa ne-zabbix)
- uluhlu lweendawo zexesha zenziwe (ezifunekayo ukuze ziboniswe kujongano lwewebhu)
- I-IP yangoku ifunyenwe, iboniswa kumcimbi (isimemo sokungena kwiconsole)
- Isimemo siyatshintsha - ibinzana elithi Ukulungele ukusebenza liyavela
- I-firmware ilungele ukusetyenziswa
Iifayile zenkonzo zibalulekile, zizo ezibeka ukulandelelana kokuqaliswa kwazo
[Unit]
Description=restore system settings
Before=network.service prepare.service postgresql.service systemd-networkd.service systemd-resolved.service
[Service]
Type=oneshot
ExecStart=/usr/bin/settings_restore.sh
[Install]
WantedBy=multi-user.target
Njengoko ubona, ndifake ukuxhomekeka ukuze iskripthi sam siqale sisebenze, kwaye emva koko inethiwekhi iya kunyuka kwaye i-DBMS iya kuqala.
Kwaye inkonzo yesibini (zabbix ukulungiswa)
#!/bin/sh
[Unit]
Description=monitor prepare system
After=postgresql.service settings_restore.service
Before=zabbix-server.service zabbix-agent.service
[Service]
Type=oneshot
ExecStart=/usr/bin/prepare.sh
[Install]
WantedBy=multi-user.target
Kuntsonkothile ngakumbi apha.Ukuqaliswa kwakhona kubasebenzisi abaninzi.target, kodwa EMVA kokuqalisa i-postgresql DBMS kunye nesetting_restore yam. Kodwa PHAMBI kokuqalisa iinkonzo ze-zabbix.
Inkonzo yesibali-xesha kwi-logrotate
I-Systemd ingathatha indawo ye-CRN. Ngokunyanisekileyo. Ngaphezu koko, ukuchaneka akupheli kumzuzu, kodwa ukuya kwisibini (kuthekani ukuba kuyimfuneko) Okanye unokwenza i-timer e-monotonous, ebizwa ngokuba yi-timeout evela kwisiganeko.
Yayilixesha elimnandi elibala ixesha ukusuka ekuqaleni komtshini endiwudalileyo.
Oku kuya kufuna iifayile ezi-2
logrotateTimer.service - eyona nkcazo yenkonzo:
[Unit]
Description=run logrotate
[Service]
ExecStart=logrotate /etc/logrotate.conf
TimeoutSec=300
Ilula - inkcazo yomyalelo wokuqaliswa.
Ifayile yesibini ye-logrotateTimer.timer kulapho izibali-xesha zisebenza khona:
[Unit]
Description=Run logrotate
[Timer]
OnBootSec=15min
OnUnitActiveSec=15min
[Install]
WantedBy=timers.target
Yintoni apha:
- inkcazo yesibali-xesha
- Ixesha lokuqala lokuqala, ukuqala kwi-system boot
- ixesha lokuphehlelelwa
- Ukuxhomekeka kwinkonzo yesibali-xesha Enyanisweni, lo ngumtya owenza isibali-xesha
Iskripthi esisebenzayo xa ucima kunye nethagethi yakho yokuvala
Kolunye uphuhliso, kwafuneka ndenze inguqulelo enzima ngakumbi yokucima umatshini - ngethagethi yam, ukuze ndenze izenzo ezininzi. Kuyacetyiswa ukuba wenze inkonzo yokudubula enye ngokhetho lweRemainAfterExit, kodwa oku kukuthintela ekudaleni iscript esisebenzisanayo.
Kodwa inyani yeyokuba imiyalelo eqaliswe yi-ExecOnStop inketho isenziwa ngaphandle kwe-TTY! Kulula ukuyijonga - coma i-tty umyalelo kwaye ugcine imveliso yayo.
Ke ngoko, ndiphumeze ukuvala ngojoliso lwam. Andifuni ukuba ndilungile nge-100%, kodwa iyasebenza!
Yenziwa njani (ngokwemiqathango ngokubanzi):
Ndenze into ekujoliswe kuyo my_shutdown.target, engaxhomekekanga nakubani na:
eyam_cima.ithagethi
[Unit]
Description=my shutdown
AllowIsolate=yes
Wants=my_shutdown.service
Xa usiya kule thagethi (nge systemctl isolate my_shutdwn.target), yazisa inkonzo yam_shutdown.service, umsebenzi wayo olula - ukuphumeza i-my_shutdown.sh script:
[Unit]
Description=MY shutdown
[Service]
Type=oneshot
ExecStart=/usr/bin/my_shutdown.sh
StandardInput=tty
TTYPath=/dev/tty3
TTYReset=yes
TTYVHangup=yes
WantedBy=my_shutdown.target
- Ngaphakathi kwesi script ndenza izenzo eziyimfuneko. Unokongeza izikripthi ezininzi kwithagethi yokuguquguquka kunye nokulula:
my_shutdown.sh
#!/bin/bash --login
if [ -f /tmp/reboot ];then
command="systemctl reboot"
elif [ -f /tmp/shutdown ]; then
command="systemctl poweroff"
fi
#ΠΠΎΡ Π·Π΄Π΅ΡΡ Π½ΡΠΆΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
#ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, cp /home/user/data.txt /storage/user/
$command
Phawula. Ukusebenzisa i /tmp/reboot kunye /tmp/shutdown iifayile. Awukwazi ukufowunela ithagethi ngeeparamitha. Kuphela inkonzo enokwenzeka.
Kodwa ndisebenzisa ithagethi ukuze ndibe nokuguquguquka emsebenzini kunye nomyalelo oqinisekisiweyo wezenzo.
Noko ke, eyona nto ibangelβ umdla yeza kamva. Umatshini kufuneka ucinywe/uqalwe ngokutsha. Kwaye kukho iinketho ezi-2:
- Buyisela ulayisho phantsi, ucimo kunye neminye imiyalelo (eseyi-symlinks kwi-systemctl) kunye neskripthi sakho. Ngaphakathi kweskripthi, yiya ku-my_shutdown.target. Kwaye izikripthi ezingaphakathi kwithagethi emva koko ufowunele i-systemctl ngokuthe ngqo, umzekelo, i-systemctl reboot
- Inketho elula, kodwa andiyithandi. Kulo lonke ujongano, musa ukufowunela ukuvala/uqalise kwakhona/olunye, kodwa fowunela ngokuthe ngqo i-systemctl ekujoliswe kuyo yodwa my_shutdown.target
Ndikhethe inketho yokuqala. Kwi-systemd, qalisa kwakhona (njenge-poweroff) zii-symlinks kwi-systemd.
ls -l /sbin/poweroff
lrwxrwxrwx 1 root root 14 ΡΠ΅Π½ 30 18:23 /sbin/poweroff -> /bin/systemctl
Ke ngoko, ungazibuyisela endaweni yazo ngezakho izikripthi:
qalisa kwakhona
#!/bin/sh
touch /tmp/reboot
sudo systemctl isolate my_shutdown.target
fi
umthombo: www.habr.com