Systemd, nga tuhinga tauwhitiwhiti me nga taima

Systemd, nga tuhinga tauwhitiwhiti me nga taima

Whakataki

I te wa e whakawhanake ana mo Linux, ka puta te mahi ki te hanga tuhinga tauwhitiwhiti ka mahia i te wa e ka ana, e kati ana ranei te punaha. I roto i te punaha V he ngawari tenei, engari ma te punaha ka whakarereke. Engari ka taea e ia ona ake taima.

He aha tatou e hiahia ai ki nga whaainga?

He maha nga wa ka tuhia ko te whaainga he rite ki te runlevel i roto i te punaha V -init. Ko taku tino whakahē. He maha ake o raatau ka taea e koe te wehewehe i nga kohinga ki nga roopu, hei tauira, whakarewahia he roopu ratonga me te whakahau kotahi me te mahi i etahi atu mahi. I tua atu, karekau he arowhai, he whakawhirinaki anake.

He tauira o te whainga ina whakahohea (tirohanga ahua) me te whakahaere i te tuhinga tauwhitiwhiti

Whakaahuatanga o te whaainga ake:

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

Ka timata tenei whaainga ina whakarewahia te maha-kaiwhakamahi.target ka waea atu ki installer.service. Heoi, tera pea he maha nga ratonga penei.

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

Ka mutu, he tauira o te tuhinga e mahia ana:

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

Ko te mea nui ko te kowhiri i te whiringa whakamutunga.target - te whaainga kia tae mai te punaha i te tiimatanga. I te wa o te mahi whakaoho, ka haere a systemd ki nga whakawhirinakitanga me te whakarewa i nga mea katoa e hiahiatia ana.
He rereke nga huarahi ki te whiriwhiri i te final.target, I whakamahia e ahau te whiringa uta mo tenei.

He penei te ahua o te whakarewanga whakamutunga:

  1. Ka timata te bootloader
  2. Ka timata te bootloader ki te whakarewa i te firmware ma te tuku i te tawhā final.target
  3. Ka timata a Systemd ki te timata i te punaha. Ka haere ki te installer.target, work.target ranei mai i te basic.target ma o raatau whakawhirinakitanga (hei tauira, multi-user.target). Ko te whakamutunga ka kawe i te punaha ki te mahi i roto i te aratau e hiahiatia ana

Te whakarite i te firmware mo te whakarewatanga

I te wa e hanga ana i te firmware, ka ara ake te mahi ki te whakaora i te ahuatanga o te punaha i te tiimatanga me te penapena i te wa e kati ana. Ko te tikanga o te State ko nga konae whirihoranga, nga putunga putunga raraunga, nga tautuhinga atanga, aha atu.

Ka whakahaerehia e Systemd nga tukanga i roto i te whaainga kotahi i roto i te whakarara. He herenga ka taea e koe te whakatau i te raupapa whakaoho o nga tuhinga.

Me pehea te mahi i roto i taku kaupapa ( https://habr.com/ru/post/477008/ https://github.com/skif-web/monitor)

  1. Ka timata te punaha
  2. Ka whakarewahia te ratonga settings_restore.service. Ka tirotirohia te ahua o te konae settings.txt i te waahanga raraunga. Mena kaore i reira, ka tukuna he konae tohutoro ki tona waahi. I muri mai, ka whakahokia nga tautuhinga punaha:
    • kupuhipa kaiwhakahaere
    • ingoa manaaki,
    • rohe wa
    • rohe
    • Ka whakatau mena kei te whakamahia nga papaaho katoa. Ma te taunoa, he iti te rahi o te ahua - mo te ngawari ki te kape me te tuhi ki te hunga pāpāho. I te tiimatanga, ka tirotirohia mena he waahi kaore ano kia whakamahia. Mena kei reira, ka wehewehea ano te kōpae.
    • Te whakaputa miihini-id mai i te wahitau MAC. He mea nui tenei mo te whiwhi i taua wahitau ma te DHCP
    • Tautuhinga whatunga
    • Whakawhāitihia te rahi o ngā rākau
    • Kei te whakareri te puku o waho mo te mahi (mehemea ka whakahohea te kowhiringa e pa ana, he hou te puku)
  3. Tīmatahia te postgresq
  4. Ka timata te ratonga whakaora. E hiahiatia ana ki te whakarite i te zabbix me tana papaa raraunga:
    • Ka taki mena kei te takoto kee he papaa raraunga zabbix. Ki te kore, he mea hanga mai i nga putunga arawhiti (me te zabbix)
    • ka hangaia he rarangi o nga waahi waahi (me whakaatu ki te atanga tukutuku)
    • Ka kitea te IP o naianei, ka whakaatuhia i roto i te take (te tono ki te takiuru ki te papatohu)
  5. Ka huri te powhiri - ka puta te kupu Riri ki te mahi
  6. Kua reri te firmware mo te whakamahi

He mea nui nga konae ratonga, ma ratou e whakatakoto te raupapa o to ratou whakarewatanga

[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

Kei te kite koe, i whakauruhia e ahau nga whakawhirinaki kia mahi tuatahi taku tuhinga, katahi ka piki ake te whatunga ka timata te DBMS.

Me te karakia tuarua (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

He iti ake te uaua i konei Ko te whakarewatanga kei roto ano i te maha-kaiwhakamahi.target, engari I muri i te tiimata i te postgresql DBMS me taku tautuhinga_restore. Engari i mua i te tiimata i nga ratonga zabbix.

Ratonga taima mo te logrotate

Ka taea e Systemd te whakakapi i te CRON. Tino. I tua atu, ko te tika kaore e eke ki te meneti, engari ki te tuarua (mehemea e hiahiatia ana) Ka taea ranei e koe te hanga i te taima monotonous, ka karangahia e te waahi mai i tetahi huihuinga.
Ko te taima mokemoke te tatau i te wa mai i te timatanga o te miihini i hanga e au.
Ka hiahiatia kia 2 nga konae
logrotateTimer.service - te whakaahuatanga o te ratonga:

[Unit]
Description=run logrotate

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

He maamaa - he whakaahuatanga mo te whakahau whakarewa.
Ko te konae tuarua logrotateTimer.timer ko te waahi e mahi ai nga matawā:

[Unit]
Description=Run logrotate

[Timer]
OnBootSec=15min
OnUnitActiveSec=15min

[Install]
WantedBy=timers.target

He aha kei konei:

  • whakaahuatanga taima
  • Te wa tiimata tuatahi, ka tiimata mai i te punaha whakahaere
  • te wa o te whakarewanga ano
  • Te ti'aturi ki te ratonga matawā

Hotuhi tauwhitiwhiti i te wa e tutakina ana me to whaainga kati

I tetahi atu whanaketanga, me mahi au i tetahi waahanga uaua ake o te whakaweto i te miihini - na roto i taku ake whaainga, kia nui ai nga mahi. I te nuinga o te wa ka tohutohuhia kia hanga he ratonga oneshot me te whiringa RemainAfterExit, engari na tenei ka aukati i a koe ki te hanga tuhinga tauwhitiwhiti.

Engari ko te mea ko nga whakahau i whakarewahia e te whiringa ExecOnStop ka mahia i waho o te TTY! He ngawari ki te tirotiro - whakapiri i te whakahau tty ka tiakina tona putanga.

Na reira, i whakatinanahia e au te kati na roto i taku whaainga. Kaore au e kii he 100% te tika, engari he pai!
Me pehea te mahi (i roto i nga tikanga whanui):
I hanga e ahau he whaainga my_shutdown.target, kaore i whakawhirinaki ki tetahi:
my_shutdown.target

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

I te wa e haere ana ki tenei whaainga (ma te systemctl i wehe i taku_shutdwn.target), ka whakarewahia e ia te ratonga my_shutdown.service, he maamaa te mahi - ki te mahia te tuhinga 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

  • I roto i tenei tuhinga ka mahia e au nga mahi e tika ana. Ka taea e koe te taapiri i nga tuhinga maha ki te whaainga mo te ngawari me te ngawari:

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

Tuhipoka. Ma te whakamahi i nga konae /tmp/reboot me /tmp/whakaweto. Kaore e taea e koe te karanga i te whaainga me nga tawhā. Ko te ratonga anake ka taea.

Engari ka whakamahi ahau i te whaainga kia ngawari ki te mahi me te raupapa o nga mahi.

Heoi, ko te mea tino pai ka tae mai i muri mai. Me whakaweto/whakahoutia te miihini. A e rua nga whiringa:

  • Whakakapihia te whakaara ano, te kati me etahi atu whakahau (he hononga hono tonu ki te systemctl) me to tuhinga.I roto i te tuhinga, haere ki my_shutdown.target. A ko nga tuhinga kei roto i te whaainga ka karanga tika ki te systemctl, hei tauira, systemctl reboot
  • He whiringa ngawari ake, engari kaore au e pai. I roto i nga atanga katoa, kaua e karanga whakaweto / whakaara ano / etahi atu, engari me waea tika ki te target systemctl wehe my_shutdown.target

I whiriwhiria e ahau te whiringa tuatahi. I roto i te systemd, ko te whakaara ano (penei i te poweroff) he hononga hono ki te systemd.

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

Na reira, ka taea e koe te whakakapi ki a koe ake tuhinga:
tīmata anō

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

Source: will.com

Tāpiri i te kōrero