å°å ¥
Linux åãã«éçºããå Žåãã·ã¹ãã ã®é»æºæå ¥æãŸãã¯ã·ã£ããããŠã³æã«å®è¡ããã察話åã¹ã¯ãªãããäœæããã¿ã¹ã¯ãçºçããŸãã system V ã§ã¯ããã¯ç°¡åã§ããããsystemd ã§ã¯èª¿æŽãå¿ èŠã«ãªããŸãã ãã ããç¬èªã®ã¿ã€ããŒãæã€ããšãã§ããŸãã
ãªãç®æšãå¿ èŠãªã®ã§ãããã?
ã¿ãŒã²ããã¯ã·ã¹ãã V -init ã®ã©ã³ã¬ãã«ã«çžåœãããã®ãšããŠæ©èœãããšããæžãããŠããŸãã ç§ã¯åºæ¬çã«åæããŸããã ãããã¯ããã«å€ããããããã±ãŒãžãã°ã«ãŒãã«åå²ããããšãã° XNUMX ã€ã®ã³ãã³ãã§ãµãŒãã¹ã®ã°ã«ãŒããèµ·åããè¿œå ã®ã¢ã¯ã·ã§ã³ãå®è¡ããããšãã§ããŸãã ããã«ããããã«ã¯éå±€ããªããäŸåé¢ä¿ã®ã¿ããããŸãã
察話åã¹ã¯ãªãããå®è¡ããŠæå¹ã«ããå Žåã®ã¿ãŒã²ããã®äŸ (æ©èœã®æŠèŠ)
ã¿ãŒã²ããèªäœã®èª¬æ:
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
ãã®ã¿ãŒã²ããã¯ãmulti-user.target ãèµ·åãããinstaller.service ãåŒã³åºããããšãã«éå§ãããŸãã ãã ãããã®ãããªãµãŒãã¹ãããã€ãååšããå ŽåããããŸãã
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
æåŸã«ãå®è¡ãããã¹ã¯ãªããã®äŸã瀺ããŸãã
#!/bin/bash
# ÐеÑеÑ
ПЎОЌ в tty3
chvt 3
echo "Install, y/n ?"
read user_answer
æãéèŠãªããšã¯ãfinal.target (ã·ã¹ãã ãèµ·åæã«å°éããã¿ãŒã²ãã) ãéžæããããšã§ãã èµ·åããã»ã¹äžã«ãsystemd ã¯äŸåé¢ä¿ã調ã¹ãŠãå¿
èŠãªãã®ããã¹ãŠèµ·åããŸãã
Final.target ãéžæããã«ã¯ããŸããŸãªæ¹æ³ããããŸãããç§ã¯ããã«ããŒã㌠ãªãã·ã§ã³ã䜿çšããŸããã
æçµçãªèµ·åã¯æ¬¡ã®ããã«ãªããŸãã
- ããŒãããŒããŒãèµ·åããŸã
- ããŒãããŒããŒã¯ãfinal.target ãã©ã¡ãŒã¿ãæž¡ãããšã«ãã£ãŠãã¡ãŒã ãŠã§ã¢ã®èµ·åãéå§ããŸãã
- Systemd ãã·ã¹ãã ã®èµ·åãéå§ããŸãã äŸåé¢ä¿ (ããšãã°ãmulti-user.target) ãä»ããŠãbasic.target ãã installer.target ãŸã㯠work.target ã«é 次移åããŸãã åŸè ã¯ãã·ã¹ãã ãåžæã®ã¢ãŒãã§åäœãããŸãã
ãã¡ãŒã ãŠã§ã¢ã®èµ·åæºå
ãã¡ãŒã ãŠã§ã¢ãäœæãããšãã¯ãèµ·åæã«ã·ã¹ãã ç¶æ ã埩å ããã·ã£ããããŠã³æã«ãããä¿åãããšããã¿ã¹ã¯ãåžžã«çºçããŸãã ç¶æ ãšã¯ãæ§æãã¡ã€ã«ãããŒã¿ããŒã¹ ãã³ããã€ã³ã¿ãŒãã§ã€ã¹èšå®ãªã©ãæå³ããŸãã
Systemd ã¯ãåãã¿ãŒã²ããå ã®ããã»ã¹ã䞊è¡ããŠå®è¡ããŸãã ã¹ã¯ãªããã®èµ·åã·ãŒã±ã³ã¹ã決å®ã§ããäŸåé¢ä¿ããããŸãã
ç§ã®ãããžã§ã¯ãã§ã¯ã©ã®ããã«æ©èœããŸãã(
- ã·ã¹ãã ãèµ·åããŸã
- settings_restore.service ãµãŒãã¹ãèµ·åãããããŒã¿ ã»ã¯ã·ã§ã³ã« settings.txt ãã¡ã€ã«ãååšãããã©ããããã§ãã¯ãããŸãã ããã«ãªãå Žåã¯ãåç
§ãã¡ã€ã«ããã®å Žæã«é
眮ããã次ã«ã·ã¹ãã èšå®ã埩å
ãããŸãã
- 管çè ãã¹ã¯ãŒã
- ãã¹ãåã
- ã¿ã€ã ãŸãŒã³
- ãã±ãŒã«
- ãã¹ãŠã®ã¡ãã£ã¢ã䜿çšãããŠãããã©ãããå€æããŸãã ããã©ã«ãã§ã¯ãã¡ãã£ã¢ãžã®ã³ããŒãèšé²ã容æã«ãããããç»åãµã€ãºã¯å°ãããªã£ãŠããŸãã èµ·åæã«ãæªäœ¿çšã®ã¹ããŒã¹ããŸã ãããã©ããã確èªããŸãã ååšããå Žåããã£ã¹ã¯ã¯åããŒãã£ã·ã§ã³åãããŸãã
- MAC ã¢ãã¬ã¹ãããã·ã³ ID ãçæããŸãã ããã¯ãDHCP çµç±ã§åãã¢ãã¬ã¹ãååŸããããã«éèŠã§ãã
- ãããã¯ãŒã¯èšå®
- ãã°ã®ãµã€ãºãå¶éããŸã
- å€éšãã©ã€ãã¯äœæ¥çšã«æºåäžã§ã (察å¿ãããªãã·ã§ã³ãæå¹ã§ããã©ã€ããæ°ããââå Žå)
- postgresqãéå§ãã
- 埩å
ãµãŒãã¹ãéå§ãããŸãã zabbix èªäœãšãã®ããŒã¿ããŒã¹ãæºåããå¿
èŠããããŸãã
- zabbix ããŒã¿ããŒã¹ããã§ã«ååšãããã©ããã確èªããŸãã ããã§ãªãå Žåã¯ãåæåãã³ã (zabbix ã«å«ãŸãã) ããäœæãããŸãã
- ã¿ã€ã ãŸãŒã³ã®ãªã¹ããäœæãããŸã (Web ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¿ã€ã ãŸãŒã³ã衚瀺ããããã«å¿ èŠã§ã)
- çŸåšã® IP ãèŠã€ãããåé¡ã«è¡šç€ºãããŸã (ã³ã³ãœãŒã«ãžã®ãã°ã€ã³ãžã®æåŸ )
- æåŸ ç¶ãå€ããããReady to workããšãããã¬ãŒãºã衚瀺ãããŸã
- ãã¡ãŒã ãŠã§ã¢ã䜿çšããæºåãã§ããŸãã
ãµãŒãã¹ ãã¡ã€ã«ã¯éèŠã§ããããµãŒãã¹ ãã¡ã€ã«ã®èµ·åé åºãèšå®ãããã®ã§ãã
[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
ã芧ã®ãšãããã¹ã¯ãªãããæåã«åäœããããã«äŸåé¢ä¿ãã€ã³ã¹ããŒã«ãããã®åŸã§ãããã¯ãŒã¯ãèµ·åã㊠DBMS ãèµ·åããããã«ããŸããã
ãããŠXNUMXã€ç®ã®ãµãŒãã¹ïŒ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
ããã§ã¯å°ãè€éã§ãèµ·åã multi-user.target ã§è¡ãããŸãããpostgresql DBMS ãš settings_restore ãèµ·åããåŸã§ãã ãã ããzabbix ãµãŒãã¹ãéå§ããåã«ã
logrotate ã®ã¿ã€ã㌠ãµãŒãã¹
Systemd 㯠CRON ã眮ãæããããšãã§ããŸãã çå£ã«ã ããã«ã粟床ã¯ååäœã§ã¯ãªãç§åäœã§ã (å¿
èŠãªå Žå) ãŸãã¯ãã€ãã³ãããã®ã¿ã€ã ã¢ãŠãã«ãã£ãŠåŒã³åºãããå調ãªã¿ã€ããŒãäœæããããšãã§ããŸãã
ããã¯ãç§ãäœã£ããã·ã³ã®èµ·åããæéãã«ãŠã³ãããå調ãªã¿ã€ããŒã§ããã
ããã«ã¯ 2 ã€ã®ãã¡ã€ã«ãå¿
èŠã§ã
logrotateTimer.service - ãµãŒãã¹ã®å®éã®èª¬æ:
[Unit]
Description=run logrotate
[Service]
ExecStart=logrotate /etc/logrotate.conf
TimeoutSec=300
ç°¡åã§ã - èµ·åã³ãã³ãã®èª¬æã§ãã
XNUMX çªç®ã®ãã¡ã€ã« logrotateTimer.timer ã¯ã¿ã€ããŒãåäœããå Žæã§ãã
[Unit]
Description=Run logrotate
[Timer]
OnBootSec=15min
OnUnitActiveSec=15min
[Install]
WantedBy=timers.target
ããã«ãããã®:
- ã¿ã€ããŒã®èª¬æ
- ååèµ·åæéïŒã·ã¹ãã èµ·åæããéå§ïŒ
- ãããªãæã¡äžãã®æé
- ã¿ã€ã㌠ãµãŒãã¹ãžã®äŸåé¢ä¿ãå®éãããã¯ã¿ã€ããŒãäœæããæååã§ãã
ã·ã£ããããŠã³æã®å¯Ÿè©±åã¹ã¯ãªãããšã·ã£ããããŠã³ã¿ãŒã²ãã
å¥ã®éçºã§ã¯ãå€ãã®ã¢ã¯ã·ã§ã³ãå®è¡ããããã«ãèªåã®ã¿ãŒã²ãããä»ããŠãã·ã³ã®é»æºãåããšããããè€éãªããŒãžã§ã³ãå®è¡ããå¿ èŠããããŸããã éåžžã¯ãRemainAfterExit ãªãã·ã§ã³ã䜿çšããŠã¯ã³ã·ã§ãã ãµãŒãã¹ãäœæããããšããå§ãããŸãããããã«ãã察話åã¹ã¯ãªãããäœæã§ããªããªããŸãã
ãããå®éã«ã¯ãExecOnStop ãªãã·ã§ã³ã«ãã£ãŠèµ·åãããã³ãã³ã㯠TTY ã®å€éšã§å®è¡ãããŸãã 確èªããã®ã¯ç°¡åã§ããtty ã³ãã³ãã貌ãä»ããŠããã®åºåãä¿åããŸãã
ãããã£ãŠãã¿ãŒã²ãããéããŠã·ã£ããããŠã³ãå®è£
ããŸããã 100%æ£ãããšã¯èšããŸããããå¹æã¯ãããŸãã
ãããã©ã®ããã«è¡ããããïŒäžè¬çã«ïŒïŒ
誰ã«ãäŸåããªãã¿ãŒã²ãã my_shutdown.target ãäœæããŸããã
my_shutdown.target
[Unit]
Description=my shutdown
AllowIsolate=yes
Wants=my_shutdown.service
ãã®ã¿ãŒã²ããã«ç§»åãããš (systemctl isolate my_shutdwn.target çµç±)ãmy_shutdown.service ãµãŒãã¹ãèµ·åãããŸãããã®ãµãŒãã¹ã®ã¿ã¹ã¯ã¯åçŽã§ã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
- ãã®ã¹ã¯ãªããå ã§å¿ èŠãªã¢ã¯ã·ã§ã³ãå®è¡ããŸãã æè»æ§ãšå©äŸ¿æ§ãé«ããããã«ãã¿ãŒã²ããã«å€ãã®ã¹ã¯ãªãããè¿œå ã§ããŸãã
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
泚èšã /tmp/reboot ãã¡ã€ã«ãš /tmp/shutdown ãã¡ã€ã«ã䜿çšããŸãã ãã©ã¡ãŒã¿ãŒã䜿çšã㊠target ãåŒã³åºãããšã¯ã§ããŸããã ãµãŒãã¹ã®ã¿å¯èœã§ãã
ãã ããç§ã¯äœæ¥ã®æè»æ§ãšã¢ã¯ã·ã§ã³ã®é åºãä¿èšŒããããã«ã¿ãŒã²ããã䜿çšããŠããŸãã
ããããæãèå³æ·±ãããšã¯ãã®åŸã«èµ·ãããŸããã ãã·ã³ã®é»æºãåããåèµ·åããå¿ èŠããããŸãã ãããŠããªãã·ã§ã³ã¯ 2 ã€ãããŸãã
- rebootãshutdownãããã³ãã®ä»ã®ã³ãã³ã (ãããã¯äŸç¶ãšã㊠systemctl ãžã®ã·ã³ããªãã¯ãªã³ã¯ã§ã) ãã¹ã¯ãªããã«çœ®ãæããŸããã¹ã¯ãªããå ã§ãmy_shutdown.target ã«ç§»åããŸãã ãããŠãã¿ãŒã²ããå ã®ã¹ã¯ãªãã㯠systemctl ãçŽæ¥åŒã³åºããŸã (ããšãã°ãsystemctl reboot)ã
- ããã·ã³ãã«ãªãªãã·ã§ã³ã§ãããç§ã¯å¥œãã§ã¯ãããŸããã ãã¹ãŠã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ãshutdown/reboot/other ãåŒã³åºãããã¿ãŒã²ãã systemctl isolate my_shutdown.target ãçŽæ¥åŒã³åºããŸãã
ç§ã¯æåã®ãªãã·ã§ã³ãéžæããŸããã systemd ã§ã¯ãåèµ·å (é»æºãªããªã©) 㯠systemd ãžã®ã·ã³ããªãã¯ãªã³ã¯ã§ãã
ls -l /sbin/poweroff
lrwxrwxrwx 1 root root 14 ÑеМ 30 18:23 /sbin/poweroff -> /bin/systemctl
ãããã£ãŠãããããç¬èªã®ã¹ã¯ãªããã«çœ®ãæããããšãã§ããŸãã
ãªããŒã
#!/bin/sh
touch /tmp/reboot
sudo systemctl isolate my_shutdown.target
fi
åºæïŒ habr.com