Systemd, izikripthi ezisebenzisanayo kunye nezibali-xesha

Systemd, izikripthi ezisebenzisanayo kunye nezibali-xesha

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:

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

  1. Inkqubo iyaqala
  2. 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)
  3. Qala i-postgresq
  4. 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)
  5. Isimemo siyatshintsha - ibinzana elithi Ukulungele ukusebenza liyavela
  6. 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

Yongeza izimvo