I-Systemd, imibhalo esebenzayo nezibali sikhathi

I-Systemd, imibhalo esebenzayo nezibali sikhathi

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:

  1. I-bootloader iqala
  2. I-bootloader iqala ukwethula i-firmware ngokudlula ipharamitha yokugcina
  3. 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 ( https://habr.com/ru/post/477008/ https://github.com/skif-web/monitor)

  1. Uhlelo luyaqala
  2. 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)
  3. Qala i-postgresq
  4. 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)
  5. Isimemo siyashintsha - igama elithi Ready to work liyavela
  6. 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

Engeza amazwana