Systemd, zolembera zolumikizana ndi zowerengera nthawi

Systemd, zolembera zolumikizana ndi zowerengera nthawi

Mau oyamba

Mukamapanga Linux, ntchito yopanga zolemba zolumikizana zomwe zimachitika pomwe makinawo atsegulidwa kapena kutseka amawuka. Mu system V izi zinali zophweka, koma ndi systemd imapanga zosintha. Koma ikhoza kukhala ndi nthawi yakeyake.

N'chifukwa chiyani timafunikira zolinga?

Nthawi zambiri zimalembedwa kuti chandamale chimagwira ntchito ngati analogue ya runlevel mu system V -init. Ine sindimagwirizana kwenikweni. Pali zambiri za izo ndipo mukhoza kugawa phukusi m'magulu ndipo, mwachitsanzo, kuyambitsa gulu la mautumiki ndi lamulo limodzi ndikuchita zina zowonjezera. Komanso, alibe utsogoleri, koma kudalira.

Chitsanzo cha chandamale chikayatsidwa (chidule cha mawonekedwe) ndikugwiritsa ntchito script

Kufotokozera chandamale yomweyi:

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

Cholinga ichi chidzayamba pamene multi-user.target idzakhazikitsidwa ndikuyimba installer.service. Komabe, pakhoza kukhala mautumiki angapo otere.

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

Ndipo potsiriza, chitsanzo cha script ikuchitidwa:

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

Chofunika kwambiri ndikusankha final.target - chandamale chomwe dongosolo liyenera kufika poyambira. Pakuyambitsa, systemd idzadutsa pazodalira ndikuyambitsa zonse zomwe ikufuna.
Pali njira zosiyanasiyana zosankhira final.target, ndinagwiritsa ntchito njira yodzaza izi.

Kutulutsa komaliza kumawoneka motere:

  1. Bootloader imayamba
  2. Bootloader imayamba kuyambitsa firmware podutsa final.target parameter
  3. Systemd imayamba kuyambitsa dongosolo. Motsatizana amapita ku installer.target kapena work.target kuchokera ku basic.target kudzera mu kudalira kwawo (mwachitsanzo, multi-user.target). Omaliza abweretse dongosolo kuti ligwire ntchito yomwe mukufuna

Kukonzekera firmware kuti iyambe

Mukamapanga firmware, ntchitoyo nthawi zonse imakhala yobwezeretsa dongosolo poyambira ndikulisunga potseka. State imatanthawuza mafayilo osinthira, zotayira pa database, mawonekedwe a mawonekedwe, ndi zina.

Systemd imayendetsa njira mu chandamale chofanana. Pali zodalira zomwe zimakupatsani mwayi wodziwa momwe malembedwe amayambira.

Zimagwira ntchito bwanji mu polojekiti yanga ( https://habr.com/ru/post/477008/ https://github.com/skif-web/monitor)

  1. Dongosolo limayamba
  2. Setting_restore.service service yakhazikitsidwa, imayang'ana kupezeka kwa fayilo ya settings.txt mu gawo la data. Ngati palibe, ndiye kuti fayilo yolozera imayikidwa m'malo mwake.Kenako, zoikamo zadongosolo zimabwezeretsedwa:
    • password ya admin
    • dzina la alendo,
    • nthawi zone
    • malo
    • Imatsimikiza ngati media yonse ikugwiritsidwa ntchito. Mwachikhazikitso, kukula kwa chithunzicho ndi kochepa - kuti muzitha kukopera ndi kujambula ku media. Poyambira, imayang'ana kuti awone ngati pali malo osagwiritsidwa ntchito. Ngati ilipo, diskiyo imagawidwanso.
    • Kupanga makina-id kuchokera ku adilesi ya MAC. Izi ndizofunikira kuti mupeze adilesi yomweyo kudzera pa DHCP
    • Zokonda pa netiweki
    • Imaletsa kukula kwa zipika
    • Galimoto yakunja ikukonzedwa kuti igwire ntchito (ngati njira yofananira yayatsidwa ndipo drive ndi yatsopano)
  3. Yambani postgresq
  4. Ntchito yobwezeretsa ikuyamba. Zimafunika kukonzekera zabbix yokha ndi database yake:
    • Imafufuza ngati pali kale nkhokwe ya zabbix. Ngati sichoncho, chimapangidwa kuchokera kumayendedwe oyambira (ophatikizidwa ndi zabbix)
    • mndandanda wamagawo anthawi amapangidwa (ofunikira kuti awonetse pa intaneti)
    • IP yamakono ikupezeka, ikuwonetsedwa mu nkhani (kuyitanira kuti mulowe mu console)
  5. Maitanidwe akusintha - mawu akuti Okonzeka kugwira ntchito akuwonekera
  6. Firmware ndi yokonzeka kugwiritsidwa ntchito

Mafayilo autumiki ndi ofunikira, ndi omwe amakhazikitsa ndondomeko ya kukhazikitsidwa 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

Monga mukuonera, ndinayika zodalira kuti script yanga iyambe kugwira ntchito, ndipo pokhapokha maukonde akukwera ndipo DBMS idzayamba.

Ndipo utumiki wachiwiri (zabbix kukonzekera)

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

Ndizovuta pang'ono pano.Kuyambitsako kulinso mu multi-user.target, koma ATAyamba postgresql DBMS ndi setting_restore yanga. Koma MUSANAyambe ntchito zabbix.

Ntchito yowerengera nthawi ya logrotate

Systemd ikhoza kulowa m'malo mwa CRON. Mozama. Komanso, kulondola sikufika pa miniti, koma mpaka yachiwiri (bwanji ngati pakufunika) Kapena mutha kupanga chowerengera choyipa, chotchedwa ndi kutha kwa chochitika.
Inali chowerengera chodabwitsa chomwe chimawerengera nthawi kuyambira pomwe makinawo adayamba.
Izi zidzafuna mafayilo a 2
logrotateTimer.service - kufotokozera kwenikweni kwautumiki:

[Unit]
Description=run logrotate

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

Ndi zophweka - kufotokoza kwa lamulo loyambitsa.
Fayilo yachiwiri logrotateTimer.timer ndipamene zowerengera zimagwira ntchito:

[Unit]
Description=Run logrotate

[Timer]
OnBootSec=15min
OnUnitActiveSec=15min

[Install]
WantedBy=timers.target

Zomwe zili pano:

  • kufotokoza kwanthawi
  • Nthawi yoyambira, kuyambira pa boot system
  • nthawi yowonjezereka
  • Kudalira ntchito yowerengera nthawi.M'malo mwake, iyi ndi chingwe chomwe chimapanga chowerengera

Script yolumikizana mukayimitsa ndikutseka chandamale chanu

Pachitukuko china, ndidayenera kuchita zovuta kwambiri kuzimitsa makinawo - kudzera mu chandamale changa, kuti ndichite zambiri. Nthawi zambiri tikulimbikitsidwa kuti tipange ntchito ya Oneshot ndi njira ya RemainAfterExit, koma izi zimakulepheretsani kupanga script yolumikizana.

Koma chowonadi ndichakuti malamulo omwe adakhazikitsidwa ndi njira ya ExecOnStop amaperekedwa kunja kwa TTY! Ndiosavuta kuyang'ana - ikani lamulo la tty ndikusunga zotuluka zake.

Chifukwa chake, ndidakhazikitsa kutseka kudzera mu chandamale changa. Sindikunena kuti ndizolondola 100%, koma zimagwira ntchito!
Momwe zidachitikira (nthawi zambiri):
Ndinapanga chandamale my_shutdown.target, chomwe sichidalira aliyense:
yanga_shutdown.changa

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

Popita ku chandamalechi (kudzera systemctl isolate my_shutdwn.target), idayambitsa my_shutdown.service service, yomwe ntchito yake ndi yosavuta - kuchita 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

  • M'kati mwa script iyi ndikuchita zofunikira. Mutha kuwonjezera zolemba zambiri pazomwe mukufuna kuti muzitha kusinthasintha komanso zosavuta:

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

Zindikirani. Pogwiritsa ntchito mafayilo /tmp/reboot ndi /tmp/shutdown. Simungathe kuyimba chandamale ndi magawo. Ntchito yokha ndiyotheka.

Koma ndimagwiritsa ntchito chandamale kuti ndizitha kusinthasintha pa ntchito komanso dongosolo lotsimikizika la zochita.

Komabe, chinthu chosangalatsa kwambiri chinabwera pambuyo pake. Makinawa akufunika kuzimitsidwa/kuyambiranso. Ndipo pali 2 zosankha:

  • M'malo mwa kuyambiransoko, kutseka ndi malamulo ena (akadali ma symlink ku systemctl) ndi script yanu. M'kati mwazolemba, pitani ku my_shutdown.target. Ndipo zolemba zomwe zili mkati mwa chandamale ndiye imbani systemctl mwachindunji, mwachitsanzo, systemctl reboot
  • Njira yosavuta, koma sindimakonda. M'malo onse, musayimbire shutdown/reboot/zina, koma imbani mwachindunji chandamale systemctl isolate my_shutdown.target.

Ndinasankha njira yoyamba. Mu systemd, yambitsaninso (monga poweroff) ndi ma symlink ku systemd.

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

Chifukwa chake, mutha kuwasintha ndi zolemba zanu:
kuyambiransoko

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

Source: www.habr.com

Kuwonjezera ndemanga