Systemd, inopindirana zvinyorwa uye nguva

Systemd, inopindirana zvinyorwa uye nguva

Nhanganyaya

Paunenge uchigadzirira Linux, basa rekugadzira zvinyorwa zvinopindirana zvinoitwa kana sisitimu yabatidzwa kana kuvharwa inomuka. Musystem V izvi zvaive nyore, asi nesystemd inogadzirisa. Asi inogona kuva neyayo nguva.

Sei tichida zvinangwa?

Zvinowanzo kunyorwa kuti chinangwa chinoshanda seanalogue ye runlevel mu system V -init. Ini handibvumirani nazvo. Kune akawanda acho uye iwe unogona kupatsanura mapakeji mumapoka uye, semuenzaniso, tanga boka remasevhisi nekuraira mumwechete uye kuita zvimwe zviito. Uyezve, ivo havana hierarchy, vanongotsamira.

Muenzaniso wechinangwa kana wagoneswa (feature overview) ine inoshanda interactive script

Tsanangudzo yechinangwa pachayo:

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

Ichi chinangwa chinotanga kana multi-user.target yatangwa uye ichifonera installer.service. Zvakadaro, panogona kunge paine akati wandei masevhisi akadaro.

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

Uye pakupedzisira, muenzaniso weiyo script iri kuitwa:

#!/bin/bash
# ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² tty3
chvt 3
echo "Install, y/n ?"
read user_answer

Chinhu chinonyanya kukosha ndechokusarudza final.target - chinangwa icho system inofanira kusvika pakutanga. Munguva yekutanga maitiro, systemd inoenda kuburikidza nekutsamira uye kuvhura zvese zvainoda.
Pane nzira dzakasiyana dzekusarudza final.target, ndakashandisa sarudzo yekusimudza iyi.

Kuburitswa kwekupedzisira kunoratidzika seizvi:

  1. Iyo bootloader inotanga
  2. Iyo bootloader inotanga kuvhura iyo firmware nekupfuura iyo yekupedzisira.target parameter
  3. Systemd inotanga kutanga system. Sequentially inoenda kuinstaller.target kana work.target kubva ku basic.target kuburikidza nezvinotsamira pazviri (somuenzaniso, multi-user.target). Iyo yekupedzisira inounza iyo sisitimu kuti ishande mune inodiwa modhi

Kugadzirira iyo firmware yekutanga

Paunenge uchigadzira firmware, basa rinogara richimuka rekudzoreredza system system pakutanga uye kuichengeta kana ichidzima. State zvinoreva mafaera ekugadzirisa, dhatabhesi dumps, interface marongero, nezvimwe.

Systemd inomhanyisa maitiro muchinangwa chimwe chete chakafanana. Pane zvinotsamira zvinokutendera kuti uone kutevedzana kwekutanga kwezvinyorwa.

Inoshanda sei muprojekiti yangu ( https://habr.com/ru/post/477008/ https://github.com/skif-web/monitor)

  1. Iyo system inotanga
  2. Setting_restore.service sevhisi inotangwa.Inotarisa kuvepo kwesetting.txt faira muchikamu chedata. Kana isipo, ipapo faira rereferenzi rinoiswa panzvimbo yaro. Tevere, masisitimu ehurongwa anodzoreredzwa:
    • password password
    • zita remugamuchiri,
    • nguva zone
    • locale
    • Inoona kana midhiya yese iri kushandiswa. Nekutadza, saizi yemufananidzo idiki - kuitira nyore kukopa uye kurekodha kune midhiya. Pakutanga, inotarisa kuti ione kana pachine nzvimbo isina kushandiswa. Kana iripo, dhisiki inodzokororwa.
    • Kugadzira muchina-id kubva kuMAC kero. Izvi zvakakosha kuti uwane kero imwe chete kuburikidza neDHCP
    • Network marongero
    • Inomisa saizi yematanda
    • Iyo yekunze drive iri kugadzirirwa basa (kana iyo inoenderana sarudzo yakagoneswa uye drive iri nyowani)
  3. Tanga postgresq
  4. Basa rekudzorera rinotanga. Inodiwa kugadzirira zabbix pachayo uye dhatabhesi yayo:
    • Inotarisa kana kwatova nedhatabhesi rezabbix. Kana zvisina kudaro, inogadzirwa kubva kumarara ekutanga (anosanganisirwa ne zabbix)
    • rondedzero yenguva yenzvimbo inogadzirwa (inoda kuaratidza muwebhu interface)
    • Iyo IP yazvino inowanikwa, inoratidzwa mumagazini (kokero yekupinda muiyo console)
  5. Kukokwa kunoshanduka - mutsara wagadzirira kushanda unooneka
  6. Iyo firmware yakagadzirira kushandiswa

Mafaira ebasa akakosha, ndiwo anoisa kutevedzana kwekutanga kwavo

[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

Sezvauri kuona, ndakaisa zvinoenderana kuitira kuti script yangu itange kushanda, uye ipapo chete network yaizokwira uye DBMS yaizotanga.

Uye sevhisi yechipiri (zabbix kugadzirira)

#!/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

Zvakanyanya kuomarara pano.Kuvhurwa kuri zvakare mu-multi-user.target, asi AFTER kutanga iyo postgresql DBMS uye yangu set_restore. Asi KASATI watanga zabbix masevhisi.

Sevhisi yenguva ye logrotate

Systemd inogona kutsiva CRON. Serious. Uyezve, kurongeka hakusi kusvika kuminiti, asi kusvika kune yechipiri (ko kana zvichidiwa) Kana iwe unogona kugadzira monotonous timer, inodanwa nekupedza nguva kubva pachiitiko.
Yakanga iri monotonous timer inoverenga nguva kubva pakutanga kwemuchina wandakagadzira.
Izvi zvinoda 2 mafaira
logrotateTimer.service - iyo rondedzero chaiyo yesevhisi:

[Unit]
Description=run logrotate

[Service]
ExecStart=logrotate /etc/logrotate.conf
TimeoutSec=300

Zviri nyore - tsananguro yekuraira kwekutanga.
Yechipiri faira logrotateTimer.timer ndipo panoshanda ma timers:

[Unit]
Description=Run logrotate

[Timer]
OnBootSec=15min
OnUnitActiveSec=15min

[Install]
WantedBy=timers.target

Chii chiri pano:

  • tsananguro yenguva
  • Kutanga nguva yekutanga, kutanga kubva kusystem boot
  • nguva yekuenderera mberi
  • Kutsamira pane sevhisi yenguva.Chaizvoizvo, iyi ndiyo tambo inogadzirisa nguva

Interactive script paunenge uchivhara uye yako yekudzima chinangwa

Mune imwe budiriro, ndaifanira kuita yakaomesesa vhezheni yekudzima muchina - kuburikidza neyangu chinangwa, kuti ndiite zviito zvakawanda. Zvinowanzokurudzirwa kugadzira sevhisi imwe chete neRemainAfterExit sarudzo, asi izvi zvinokutadzisa kugadzira script inodyidzana.

Asi chokwadi ndechekuti mirairo yakatangwa neExecOnStop sarudzo inouraiwa kunze kweTTY! Zviri nyore kutarisa - namira iyo tty command uye chengetedza yakabuda.

Nokudaro, ndakashandisa kuvhara kuburikidza nechinangwa changu. Ini handizviti ndiri 100% chaiyo, asi inoshanda!
Maitirwo azvo (zvizhinji):
Ndakagadzira chinangwa my_shutdown.target, icho chaisatsamira pane chero munhu:
my_shutdown.chinangwa

[Unit]
Description=my shutdown
AllowIsolate=yes
Wants=my_shutdown.service 

Pakuenda kune ichi chinangwa (kuburikidza systemctl isolate my_shutdwn.target), yakatanga iyo my_shutdown.service sevhisi, iro basa riri nyore - kuita 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

  • Mukati meiyi script ndinoita zviito zvinodiwa. Iwe unogona kuwedzera akawanda zvinyorwa kune chinangwa chekuchinjika uye nyore:

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

Cherechedza. Uchishandisa iyo /tmp/reboot uye /tmp/shutdown mafaera. Iwe haugone kufonera chinangwa nemaparameter. Sevhisi chete inogoneka.

Asi ini ndinoshandisa chinangwa kuve nekuchinjika mubasa uye kurongeka kwakavimbiswa kwezviito.

Zvisinei, chinhu chinonyanya kufadza chakauya gare gare. Muchina uyu unoda kudzimwa/kutangwazve. Uye pane 2 sarudzo:

  • Chinja reboot, shutdown nemimwe mirairo (ichiri symlinks kusystemctl) nescript yako. Mukati mezvinyorwa, enda kumy_shutdown.target. Uye zvinyorwa zviri mukati mechinangwa zvino fonera systemctl zvakananga, semuenzaniso, systemctl reboot
  • Sarudzo iri nyore, asi ini handiifarire. Munzvimbo dzese, usafonera shutdown/reboot/zvimwe, asi fonera zvakananga iyo inotarirwa systemctl isolate my_shutdown.target.

Ndakasarudza sarudzo yekutanga. Mu systemd, reboot (senge poweroff) ari symlinks kune systemd.

ls -l /sbin/poweroff 
lrwxrwxrwx 1 root root 14 сСн 30 18:23 /sbin/poweroff -> /bin/systemctl

Naizvozvo, unogona kuzvitsiva neako magwaro:
reboot

#!/bin/sh
    touch /tmp/reboot
    sudo systemctl isolate my_shutdown.target
fi

Source: www.habr.com

Voeg