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:
- Iyo bootloader inotanga
- Iyo bootloader inotanga kuvhura iyo firmware nekupfuura iyo yekupedzisira.target parameter
- 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 (
- Iyo system inotanga
- 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)
- Tanga postgresq
- 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)
- Kukokwa kunoshanduka - mutsara wagadzirira kushanda unooneka
- 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