Sistemu, scripts mmekọrịta na ngụ oge

Sistemu, scripts mmekọrịta na ngụ oge

Okwu Mmalite

Mgbe ị na-emepe emepe maka Linux, ọrụ nke ịmepụta edemede mmekọrịta nke a na-eme mgbe agbanyere ma ọ bụ mechie usoro na-ebilite. Na sistemụ V nke a dị mfe, mana na sistemu ọ na-eme mgbanwe. Mana ọ nwere ike ịnwe oge nke ya.

Gịnị mere anyị kwesịrị iche iche?

A na-edekarị ya na ebumnuche na-arụ ọrụ dị ka ihe analog nke runlevel na sistemụ V-init. Ekwetaghị m n'ezie. Enwere ọtụtụ n'ime ha ma ị nwere ike kewaa ngwungwu n'ime otu yana, dịka ọmụmaatụ, malite otu ọrụ na otu iwu wee rụọ ọrụ ndị ọzọ. Ọzọkwa, ha enweghị ndị isi, ọ bụ naanị ndabere.

Ọmụmaatụ nke ebumnuche mgbe enyere ya (nleba anya njirimara) yana edemede mmekọrịta na-agba ọsọ

Nkọwa nke ebumnuche n'onwe ya:

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

Ebumnuche a ga-amalite mgbe arụ ọrụ multi-user.target wee kpọọ installer.service. Agbanyeghị, enwere ike ịnwe ọtụtụ ọrụ dị otú ahụ.

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

N'ikpeazụ, ihe atụ nke script a na-egbu:

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

Ihe kachasị mkpa bụ ịhọrọ final.target - ebumnuche nke usoro ahụ kwesịrị ịbịarute na mmalite. N'oge usoro mmalite, systemd ga-agafe ihe ndabere wee malite ihe niile ọ chọrọ.
Enwere ụzọ dị iche iche ịhọrọ final.target, ejiri m nhọrọ loader maka nke a.

Mwepụta ikpeazụ dị ka nke a:

  1. The bootloader na-amalite
  2. Bootloader na-amalite ịmalite ngwa ngwa site na ịgafe njedebe ikpeazụ.target
  3. Sistemu na-amalite mmalite sistemụ. Na-aga na installer.target ma ọ bụ work.target site na basic.target site na ndabere ha (dịka ọmụmaatụ, multi-user.target). Nke ikpeazụ na-eweta sistemụ na-arụ ọrụ na ọnọdụ achọrọ.

Na-akwado ngwa ngwa maka mmalite

Mgbe ị na-eke firmware, ọrụ ahụ na-ebilite mgbe niile nke iweghachi steeti sistemụ na mmalite na ịchekwa ya mgbe emechiri. Steeti pụtara faịlụ nhazi, mkpofu nchekwa data, ntọala interface, wdg.

Sistemu na-agba usoro n'otu ebumnuche n'otu oge. Enwere ndabere na-enye gị ohere ikpebi usoro mmalite nke edemede.

Kedu ka ọ si arụ ọrụ na ọrụ m ( https://habr.com/ru/post/477008/ https://github.com/skif-web/monitor)

  1. Usoro na-amalite
  2. A na-ewepụta ọrụ settings_restore.Ọ na-enyocha ọnụnọ nke faịlụ settings.txt na ngalaba data. Ọ bụrụ na ọ nọghị, mgbe ahụ, a na-edobe faịlụ nrụtụ aka n'ọnọdụ ya, na-esote, eweghachite ntọala sistemụ:
    • paswọọdụ nchịkwa
    • aha nnabata,
    • mpaghara oge
    • mpaghara
    • Na-ekpebi ma a na-eji mgbasa ozi niile. Site na ndabara, nha onyonyo dị obere - maka ịdị mfe nke nnomi na ịdekọ na mgbasa ozi. Na mmalite, ọ na-enyocha iji hụ ma ọ ka nwere ohere ejighi ya. Ọ bụrụ na ọ dị, a na-ekewa diski ahụ.
    • Na-emepụta igwe-id site na adreesị MAC. Nke a dị mkpa maka ịnweta otu adreesị site na DHCP
    • Ntọala netwọkụ
    • Na-amachi nha ndekọ
    • A na-akwado draịva mpụga maka ọrụ (ọ bụrụ na agbanyere nhọrọ kwekọrọ na draịvụ ahụ dị ọhụrụ)
  3. Malite postgresq
  4. Ọrụ eweghachi na-amalite. Ọ dị mkpa iji dozie zabbix n'onwe ya na nchekwa data ya:
    • Na-enyocha ma enweelarị nchekwa data zabbix. Ọ bụrụ na ọ bụghị, a na-emepụta ya site na mkpofu mmalite (gụnyere zabbix)
    • a na-emepụta ndepụta nke mpaghara oge (chọrọ igosi ha na ntanetị weebụ)
    • Achọtara IP dị ugbu a, a na-egosipụta ya na mbipụta (oku ịbanye na njikwa)
  5. Akwụkwọ ịkpọ òkù a na-agbanwe - nkebi ahịrịokwu ahụ dị njikere ịrụ ọrụ pụtara
  6. Firmware adịla njikere maka ojiji

Faịlụ ọrụ dị mkpa, ha bụ ndị na-edozi usoro mmalite ha

[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

Dịka ị na-ahụ, etinyere m ndabere ka edemede m wee rụọ ọrụ mbụ, naanị mgbe ahụ netwọk ga-arịgo na DBMS ga-amalite.

Na nke abụọ ọrụ (zabbix nkwadebe)

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

Ọ dị ntakịrị mgbagwoju anya ebe a. Mwepụta ahụ dịkwa na multi-user.target, mana MGBE ịmalitere postgresql DBMS na ntọala m_restore. Mana tupu ịmalite ọrụ zabbix.

Ọrụ ngụ oge maka logrotate

Systemd nwere ike dochie CRON. Kwuonụ okwu. Ọzọkwa, izi ezi abụghị ruo nkeji, ma ruo nke abụọ (gịnị ma ọ bụrụ na ọ dị mkpa) Ma ọ bụ ị nwere ike ịmepụta oge na-enweghị atụ, nke a na-akpọ site na oge nkwụsị site na ihe omume.
Ọ bụ ngụ oge nke na-agụ oge site na mmalite igwe m kere.
Nke a ga-achọ faịlụ 2
logrotateTimer.service - nkọwa nke ọrụ ahụ n'ezie:

[Unit]
Description=run logrotate

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

Ọ dị mfe - nkọwa nke iwu mmalite.
Faịlụ nke abụọ logrotateTimer.timer bụ ebe ngụ oge na-arụ ọrụ:

[Unit]
Description=Run logrotate

[Timer]
OnBootSec=15min
OnUnitActiveSec=15min

[Install]
WantedBy=timers.target

Kedu ihe dị ebe a:

  • nkọwa ngụ oge
  • Oge mbido mbụ, malite na buut sistemụ
  • oge nke n'ihu mmalite
  • Ndabere na ọrụ ngụ oge. N'ezie, nke a bụ eriri na-eme ngụ oge

Edemede mmekọrịta mgbe ị na-emechi yana ebumnuche nkwụsị gị

Na mmepe ọzọ, m ga-eme ụdị mgbagwoju anya nke ịgbanyụ igwe - site na ebumnuche nke m, iji mee ọtụtụ omume. A na-atụkarị aro ka ịmepụta ọrụ onehot na nhọrọ RemainAfterExit, mana nke a na-egbochi gị ịmepụta edemede mmekọrịta.

Mana nke bụ eziokwu bụ na a na-egbu iwu ndị ExecOnStop ewepụta na mpụga TTY! Ọ dị mfe ịlele - mado iwu tty wee chekwaa mmepụta ya.

Ya mere, etinyere m mmechi ahụ site na ebumnuche m. Anaghị m ekwu na m bụ 100% ziri ezi, mana ọ na-arụ ọrụ!
Otu esi eme ya (n'ozuzu ya):
Emepụtara m target my_shutdown.target, nke na-adabereghị na onye ọ bụla:
my_shutdown. target

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

Mgbe ị na-aga na ebumnuche a (site na systemctl iche my_shutdwn.target), ọ malitere ọrụ my_shutdown.service, ọrụ ya dị mfe - iji mebie edemede 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

  • N'ime edemede a, m na-eme ihe ndị dị mkpa. Ị nwere ike itinye ọtụtụ edemede na ebumnuche maka mgbanwe na ịdị mma:

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

Rịba ama. Iji /tmp/reboot na /tmp/shutdown faịlụ. Ị nweghị ike ịkpọ ebumnuche na parampat. Naanị ọrụ ga-ekwe omume.

Mana m na-eji ebumnuche inwe mgbanwe n'ọrụ yana usoro omume ejirila n'aka.

Otú ọ dị, ihe kasị adọrọ mmasị bịara mgbe e mesịrị. Ekwesịrị ịgbanyụ/malitegharịa igwe a. Ma enwere nhọrọ 2:

  • Dochie reboot, mmechi na iwu ndị ọzọ (ha ka bụ symlinks na systemctl) na edemede gị n'ime edemede, gaa my_shutdown.target. Na scripts dị n'ime ebumnuche wee kpọọ systemctl ozugbo, dịka ọmụmaatụ, systemctl reboot
  • Nhọrọ dị mfe, mana ahụghị m ya. N'ime oghere niile, akpọla mmechi/reboot/ọzọ, mana kpọọ onye ebumnuche ozugbo na systemctl kewapụ my_shutdown.target.

M họọrọ nke mbụ nhọrọ. Na sistemu, mweghachi (dị ka poweroff) bụ akara na sistemụ.

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

Ya mere, ị nwere ike iji ederede nke gị dochie ha:
reboot

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

isi: www.habr.com

Tinye a comment