Isingeniso
Lapho uthuthukela i-Linux, umsebenzi wokudala imibhalo esebenzisanayo eyenziwa lapho isistimu ivuliwe noma ivaliwe uyavela. Kusistimu V lokhu bekulula, kodwa nge-systemd yenza izinguquko. Kodwa ingaba nezayo izikhathi.
Kungani sidinga okuhlosiwe?
Kuvame ukubhalwa ukuthi ithagethi isebenza njenge-analogue yeleveli yokugijima kusistimu V -init. Angivumi ngempela. Ziningi zazo futhi ungahlukanisa amaphakheji ngamaqembu futhi, isibonelo, uqalise iqembu lezinsizakalo ngomyalo owodwa futhi wenze izenzo ezengeziwe. Ngaphezu kwalokho, abanalo i-hierarchy, kuphela ukuncika.
Isibonelo sethagethi uma inikwe amandla (ukubuka konke kwesici) esebenzisa iskripthi esisebenzisanayo
Incazelo yethagethi 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
Lokhu okuhlosiwe kuzoqala lapho i-multi-user.target yethulwa futhi ishayela i-installer.service. Nokho, kungase kube nezinkonzo eziningana 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
Futhi ekugcineni, isibonelo seskripthi esisetshenziswayo:
#!/bin/bash
# ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ Π² tty3
chvt 3
echo "Install, y/n ?"
read user_answer
Into ebaluleke kakhulu ukukhetha i-final.target - inhloso uhlelo okufanele lufike kuyo ekuqaleni. Ngesikhathi senqubo yokuqalisa, i-systemd izodlula kokuncika futhi yethule yonke into eyidingayo.
Kunezindlela ezahlukene zokukhetha i-final.target, ngisebenzise inketho yesilayishi kulokhu.
Ukwethulwa kokugcina kubukeka kanje:
- I-bootloader iqala
- I-bootloader iqala ukwethula i-firmware ngokudlula ipharamitha yokugcina
- I-Systemd iqala ukuqala uhlelo. Ngokulandelanayo iya ku-installer.target noma ku-work.target isuka ku-basic.target ngokuncika kwayo (isibonelo, i-multi-user.target). Okwakamuva kuletha uhlelo ukuze lusebenze ngendlela oyifunayo
Ilungiselela i-firmware ukuze iqalise
Lapho udala i-firmware, umsebenzi uhlala uphakama wokubuyisela isimo sohlelo ekuqaleni nokuyigcina lapho ivala. Izwe lisho amafayela okumisa, ukulahlwa kwesizindalwazi, izilungiselelo zokusebenzelana, njll.
I-Systemd iqhuba izinqubo kuthagethi efanayo ngokuhambisana. Kukhona ukuncika okukuvumela ukuthi unqume ukulandelana kokuqalisa kwezikripthi.
Isebenza kanjani kuphrojekthi yami (
- Uhlelo luyaqala
- Isevisi ye-setting_restore.service iqalisiwe. Ihlola ukuba khona kwefayela le-setting.txt esigabeni sedatha. Uma ingekho, ifayela eliyireferensi libekwa endaweni yalo. Okulandelayo, izilungiselelo zesistimu ziyabuyiselwa:
- iphasiwedi yomlawuli
- igama lomethuleli,
- indawo yesikhathi
- indawo
- Inquma ukuthi ingabe yonke imidiya iyasetshenziswa. Ngokuzenzakalelayo, usayizi wesithombe mncane - ukuze kube lula ukukopisha nokurekhoda kumidiya. Ekuqaleni, iyahlola ukuze ibone ukuthi sisekhona yini isikhala esingasetshenzisiwe. Uma kukhona, i-disk ihlukaniswa kabusha.
- Ikhiqiza i-id yomshini ngekheli le-MAC. Lokhu kubalulekile ukuze uthole ikheli elifanayo nge-DHCP
- Izilungiselelo zenethiwekhi
- Ikhawulela usayizi wamalogi
- Idrayivu yangaphandle ilungiselelwa umsebenzi (uma inketho ehambisanayo inikwe amandla futhi idrayivu iyintsha)
- Qala i-postgresq
- Isevisi yokubuyisela iyaqala. Kudingeka ukulungiselela i-zabbix ngokwayo kanye nesizindalwazi sayo:
- Ihlola ukuthi ingabe isikhona yini isizindalwazi se-zabbix. Uma kungenjalo, idalwa kusukela ekulahleni kokuqala (okufakwe ne-zabbix)
- kwakhiwa uhlu lwezindawo zesikhathi (ezidingekayo ukuze ziboniswe kusixhumi esibonakalayo sewebhu)
- I-IP yamanje itholakele, iboniswa ekhishwe (isimemo sokungena kukhonsoli)
- Isimemo siyashintsha - igama elithi Ready to work liyavela
- I-firmware isilungele ukusetshenziswa
Amafayela wesevisi abalulekile, yiwo abeka ukulandelana kokuqaliswa kwawo
[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
Njengoba ubona, ngifake ukuncika ukuze iskripthi sami siqale sisebenze, bese kuphela lapho inethiwekhi izokhuphuka futhi i-DBMS izoqala.
Nenkonzo yesibili (zabbix preparation)
#!/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
Kuxaka kakhulu lapha. Ukwethulwa futhi ku-multi-user.target, kodwa NGEMVA kokuqala i-postgresql DBMS kanye ne-setting_restore yami. Kodwa NGAPHAMBI kokuqala izinsizakalo ze-zabbix.
Isevisi yesibali sikhathi ye-logrotate
I-Systemd ingangena esikhundleni se-CRON. Ngokujulile. Ngaphezu kwalokho, ukunemba akufiki kuminithi, kodwa kufika kwesibili (kuthiwani uma kudingekile). Noma ungakha isibali-sikhathi esidabukisayo, esibizwa ngokuvala isikhathi komcimbi.
Bekuyisibali sikhathi esimnandi esibala isikhathi kusukela ekuqaleni komshini engiwudalile.
Lokhu kuzodinga amafayela angu-2
logrotateTimer.service - incazelo yangempela yesevisi:
[Unit]
Description=run logrotate
[Service]
ExecStart=logrotate /etc/logrotate.conf
TimeoutSec=300
Kulula - incazelo yomyalo wokuqalisa.
Ifayela lesibili i-logrotateTimer.timer yilapho izibali sikhathi zisebenza khona:
[Unit]
Description=Run logrotate
[Timer]
OnBootSec=15min
OnUnitActiveSec=15min
[Install]
WantedBy=timers.target
Yini lapha:
- incazelo yesibali sikhathi
- Isikhathi sokuqala sokuqala, kusukela ekuqalisweni kwesistimu
- isikhathi sokwethulwa okwengeziwe
- Ukuncika kusevisi yesibali sikhathi. Eqinisweni, lena iyunithi yezinhlamvu eyenza isibali sikhathi
Iskripthi esisebenzisanayo lapho ucisha futhi umgomo wakho wokuvala shaqa
Kwenye intuthuko, kwadingeka ngenze inguqulo eyinkimbinkimbi yokuvala umshini - ngokusebenzisa inhloso yami, ukuze ngenze izenzo eziningi. Ngokuvamile kuyanconywa ukudala isevisi ye-oneshot ngenketho ye-RemainAfterExit, kodwa lokhu kukuvimbela ekudaleni iskripthi esisebenzisanayo.
Kepha iqiniso liwukuthi imiyalo eyethulwe inketho ye-ExecOnStop yenziwa ngaphandle kwe-TTY! Kulula ukuhlola - namathisela umyalo we-tty bese ulondoloza okukhiphayo.
Ngakho-ke, ngisebenzise ukuvala shaqa ngethagethi yami. Angisho ukuthi ngilungile ngo-100%, kodwa kuyasebenza!
Kwenziwa kanjani (ngokujwayelekile):
Ngidale umgomo my_shutdown.target, obungancikile kunoma ubani:
umgomo_wami wokuvala
[Unit]
Description=my shutdown
AllowIsolate=yes
Wants=my_shutdown.service
Uma uya kuleli thagethi (nge-systemctl isolate my_shutdwn.target), yethule isevisi my_shutdown.service, umsebenzi wawo olula - ukusebenzisa iskripthi se-my_shutdown.sh:
[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 kwalesi script ngenza izenzo ezidingekayo. Ungangeza imibhalo eminingi kokuqondisiwe ukuze ube nezimo futhi ube lula:
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
Qaphela. Ukusebenzisa /tmp/reboot kanye /tmp/shutdown amafayela. Awukwazi ukushayela okuqondiwe ngamapharamitha. Isevisi kuphela engenzeka.
Kodwa ngisebenzisa i-target ukuze ngibe nokuguquguquka emsebenzini kanye nokuhleleka okuqinisekisiwe kwezenzo.
Nokho, into ethakazelisa kakhulu yeza kamuva. Umshini udinga ukuvalwa/uqalwe kabusha. Futhi kukhona 2 ongakhetha:
- Miselela ukuqalisa phansi, ukuvala shaqa neminye imiyalo (esengama-symlink ku-systemctl) ngombhalo wakho. Ngaphakathi kweskripthi, hamba kokuthi my_shutdown.target. Futhi imibhalo engaphakathi kwethagethi bese ishayela i-systemctl ngokuqondile, isibonelo, i-systemctl iqalisa kabusha
- Inketho elula, kodwa angiyithandi. Kuzo zonke izixhumanisi, ungabizi ukuvala shaqa/uqalise kabusha/okunye, kodwa shayela ngokuqondile i-systemctl eqondiwe ihlukanise i-my_shutdown.target
Ngikhethe inketho yokuqala. Ku-systemd, qalisa kabusha (njenge-poweroff) ama-symlink ku-systemd.
ls -l /sbin/poweroff
lrwxrwxrwx 1 root root 14 ΡΠ΅Π½ 30 18:23 /sbin/poweroff -> /bin/systemctl
Ngakho-ke, ungawashintsha ufake owakho umbhalo:
qala kabusha
#!/bin/sh
touch /tmp/reboot
sudo systemctl isolate my_shutdown.target
fi
Source: www.habr.com