Tsarin tsari, rubutun mu'amala da masu ƙidayar lokaci

Tsarin tsari, rubutun mu'amala da masu ƙidayar lokaci

Gabatarwar

Lokacin haɓakawa don Linux, aikin ƙirƙirar rubutun mu'amala wanda ake aiwatarwa lokacin da aka kunna ko rufe tsarin ya taso. A cikin tsarin V wannan yana da sauƙi, amma tare da tsarin yana yin gyare-gyare. Amma yana iya samun nasa lokacin.

Me yasa muke buƙatar hari?

Yawancin lokaci ana rubuta cewa manufa tana aiki azaman analog na runlevel a cikin tsarin V-init. Ban yarda da gaske ba. Akwai ƙarin su kuma zaku iya raba fakiti zuwa ƙungiyoyi kuma, alal misali, ƙaddamar da ƙungiyar sabis tare da umarni ɗaya kuma kuyi ƙarin ayyuka. Haka kuma, ba su da matsayi, sai dai abin dogaro.

Misalin manufa lokacin da aka kunna (bayanin fasali) tare da rubutun mu'amala mai gudana

Bayanin makasudin kansa:

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

Wannan manufa za ta fara ne lokacin da aka ƙaddamar da multi-user.target kuma ya kira installer.service. Koyaya, ana iya samun irin waɗannan ayyuka da yawa.

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

Kuma a ƙarshe, misalin rubutun da ake aiwatarwa:

#!/bin/bash
# Переходим в tty3
chvt 3
echo "Install, y/n ?"
read user_answer

Abu mafi mahimmanci shine zaɓi na ƙarshe.target - makasudin da tsarin ya kamata ya isa a farawa. A yayin aiwatar da farawa, systemd zai shiga cikin abubuwan dogaro kuma ya ƙaddamar da duk abin da yake buƙata.
Akwai hanyoyi daban-daban don zaɓar final.target, Na yi amfani da zaɓin loader don wannan.

Ƙaddamarwar ƙarshe ta yi kama da haka:

  1. Bootloader yana farawa
  2. Bootloader yana fara ƙaddamar da firmware ta hanyar wuce siginar ƙarshe.target
  3. Systemd ya fara fara tsarin. A jere yana zuwa installer.target ko work.target daga basic.target ta hanyar dogaronsu (misali, Multi-user.target). Ƙarshen yana kawo tsarin aiki a yanayin da ake so

Ana shirya firmware don ƙaddamarwa

Lokacin ƙirƙirar firmware, aikin koyaushe yana tasowa na maido da tsarin tsarin a farawa da adana shi lokacin rufewa. Jiha yana nufin fayilolin daidaitawa, jujjuya bayanai, saitunan mu'amala, da sauransu.

Systemd yana gudanar da matakai a cikin manufa ɗaya a layi daya. Akwai abubuwan dogaro waɗanda ke ba ku damar tantance jerin farawa na rubutun.

Ta yaya yake aiki a cikin aikina ( https://habr.com/ru/post/477008/ https://github.com/skif-web/monitor)

  1. Tsarin yana farawa
  2. An ƙaddamar da sabis ɗin settings_restore.Sabis yana bincika kasancewar saitin.txt fayil a cikin sashin bayanai. Idan babu, to, ana sanya fayil ɗin tunani a wurinsa, na gaba, ana dawo da saitunan tsarin:
    • kalmar sirrin mai gudanarwa
    • sunan masauki,
    • yankin lokaci
    • yankin
    • Yana ƙayyade ko ana amfani da duk kafofin watsa labarai. Ta hanyar tsoho, girman hoton yana ƙarami - don sauƙi na kwafi da rikodi zuwa kafofin watsa labarai. A lokacin farawa, yana bincika don ganin ko akwai sauran sarari mara amfani. Idan akwai, an raba faifai.
    • Samar da inji-id daga adireshin MAC. Wannan yana da mahimmanci don samun adireshin iri ɗaya ta hanyar DHCP
    • Saitunan hanyar sadarwa
    • Yana iyakance girman gungumen azaba
    • Ana shirya abin tuƙi na waje don aiki (idan zaɓin da ya dace ya kunna kuma injin ɗin sabo ne)
  3. Fara postgresq
  4. Sabis na maidowa yana farawa. Ana buƙatar don shirya zabbix kanta da bayanan sa:
    • Yana bincika ko an riga an sami bayanan zabbix. Idan ba haka ba, an ƙirƙira shi daga jujjuyawar farawa (an haɗa da zabbix)
    • an ƙirƙiri jerin yankunan lokaci (ana buƙatar nuna su a cikin mahaɗin yanar gizo)
    • Ana samun IP na yanzu, ana nuna shi a cikin fitowar (gayyatar shiga cikin na'ura mai kwakwalwa)
  5. Gayyatar ta canza - jimlar shirin Shirya aiki ta bayyana
  6. An shirya firmware don amfani

Fayilolin sabis ɗin suna da mahimmanci, sune waɗanda ke saita jerin ƙaddamar da su

[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

Kamar yadda kuke gani, na shigar da abubuwan dogaro don rubutuna ya fara aiki, sannan sai kawai hanyar sadarwar zata hau kuma DBMS zata fara.

Kuma sabis na biyu (tsarin zabbix)

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

Yana da ɗan rikitarwa a nan. ƙaddamarwar kuma tana cikin masu amfani da yawa.manufa, amma BAYAN fara postgresql DBMS da saitin_restore na. Amma KAFIN fara ayyukan zabbix.

Sabis na ƙidayar lokaci don logrotate

Systemd na iya maye gurbin CRON. Da gaske. Bugu da ƙari, daidaito ba zai kai minti ɗaya ba, amma har zuwa na biyu (menene idan ana buƙata).
Ita ce mai ƙidayar lokaci ta ƙidaya lokaci daga farkon injin da na ƙirƙira.
Wannan zai buƙaci fayiloli 2
logrotateTimer.service - ainihin bayanin sabis:

[Unit]
Description=run logrotate

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

Yana da sauƙi - bayanin umarnin ƙaddamarwa.
Fayil na biyu logrotateTimer.timer shine inda masu ƙidayar lokaci ke aiki:

[Unit]
Description=Run logrotate

[Timer]
OnBootSec=15min
OnUnitActiveSec=15min

[Install]
WantedBy=timers.target

Me ke nan:

  • bayanin lokaci
  • Lokacin farawa na farko, farawa daga tsarin boot
  • lokacin kara ƙaddamarwa
  • Dogaro da sabis na ƙidayar lokaci.A gaskiya, wannan shine kirtani da ke yin mai ƙidayar lokaci

Rubutun hulɗa lokacin rufewa da makasudin rufewar ku

A wani ci gaban kuma, dole ne in yi sigar da ta fi rikitarwa ta kashe na'urar - ta hanyar manufata, don aiwatar da ayyuka da yawa. Yawancin lokaci ana ba da shawarar ƙirƙirar sabis na onehot tare da zaɓin RemainAfterExit, amma wannan yana hana ku ƙirƙirar rubutun mu'amala.

Amma gaskiyar ita ce umarnin da aka ƙaddamar da zaɓi na ExecOnStop ana aiwatar da su a wajen TTY! Yana da sauƙin dubawa - manna umarnin tty kuma adana kayan aikin sa.

Saboda haka, na aiwatar da rufewar ta hanyar manufata. Ba na da'awar zama daidai 100%, amma yana aiki!
Yadda aka yi shi (a cikin sharuddan gabaɗaya):
Na ƙirƙiri manufa my_shutdown.target, wanda bai dogara ga kowa ba:
my_rufe.manufa

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

Lokacin zuwa wannan manufa (ta hanyar systemctl ware my_shutdwn.target), ya ƙaddamar da sabis ɗin sabis na my_shutdown., aikin wanda yake da sauƙi - don aiwatar da rubutun 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

  • A cikin wannan rubutun ina yin ayyukan da suka dace. Kuna iya ƙara rubutun da yawa zuwa manufa don sassauƙa da dacewa:

my_rufe.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

Lura. Amfani da /tmp/sake yi da /tmp/shutdown fayiloli. Ba za ku iya kiran manufa tare da sigogi ba. Sabis kawai yana yiwuwa.

Amma na yi amfani da manufa don samun sassauci a cikin aiki da kuma garantin tsari na ayyuka.

Duk da haka, abu mafi ban sha'awa ya zo daga baya. Ana buƙatar kashe/sake kunna injin. Kuma akwai zaɓuɓɓuka guda 2:

  • Sauya sake kunnawa, kashewa da sauran umarni (har yanzu suna da alaƙa zuwa systemctl) tare da rubutun ku. A cikin rubutun, je zuwa my_shutdown.target. Kuma rubutun da ke cikin manufa sai a kira systemctl kai tsaye, misali, systemctl sake yi
  • Zaɓin mafi sauƙi, amma ba na son shi. A cikin duk musaya, kar a kira kashewa/sake yi/wani, amma kai tsaye kira tsarin manufactl ware my_shutdown.target

Na zaɓi zaɓi na farko. A cikin tsarin, sake yi (kamar poweroff) alamun haɗin kai ne zuwa tsarin.

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

Don haka, zaku iya maye gurbin su da rubutun ku:
sake yi

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

source: www.habr.com

Add a comment