ืกืงืจื™ืคื˜ื™ื ื•ื˜ื™ื™ืžืจื™ื ืžืขืจื›ืชื™ื™ื ื•ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ื™ื

ืกืงืจื™ืคื˜ื™ื ื•ื˜ื™ื™ืžืจื™ื ืžืขืจื›ืชื™ื™ื ื•ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ื™ื

ืžื‘ื•ื

ื‘ืขืช ืคื™ืชื•ื— ืขื‘ื•ืจ ืœื™ื ื•ืงืก, ืžืชืขื•ืจืจืช ื”ืžืฉื™ืžื” ืฉืœ ื™ืฆื™ืจืช ืกืงืจื™ืคื˜ื™ื ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ื™ื ื”ืžื•ืคืขืœื™ื ื›ืืฉืจ ื”ืžืขืจื›ืช ืžื•ืคืขืœืช ืื• ื›ื™ื‘ื•ื™ื”. ื‘ืžืขืจื›ืช V ื–ื” ื”ื™ื” ืงืœ, ืื‘ืœ ืขื systemd ื–ื” ืขื•ืฉื” ื”ืชืืžื•ืช. ืื‘ืœ ื™ื›ื•ืœ ืœื”ื™ื•ืช ืœื• ื˜ื™ื™ืžืจื™ื ืžืฉืœื•.

ืœืžื” ืื ื—ื ื• ืฆืจื™ื›ื™ื ืžื˜ืจื•ืช?

ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื ื›ืชื‘ ืฉื”ืžื˜ืจื” ืžืฉืžืฉืช ื›ืื ืœื•ื’ื™ ืœ-runlevel ื‘ืžืขืจื›ืช V -init. ืื ื™ ืœื ืžืกื›ื™ื ืขืงืจื•ื ื™ืช. ื™ืฉ ืขื•ื“ ื›ืืœื” ื•ื ื™ืชืŸ ืœื—ืœืง ื—ื‘ื™ืœื•ืช ืœืงื‘ื•ืฆื•ืช ื•ืœื“ื•ื’ืžื ืœื”ืคืขื™ืœ ืงื‘ื•ืฆืช ืฉื™ืจื•ืชื™ื ื‘ืคืงื•ื“ื” ืื—ืช ื•ืœื‘ืฆืข ืคืขื•ืœื•ืช ื ื•ืกืคื•ืช. ื™ืชืจื” ืžื›ืš, ืื™ืŸ ืœื”ื ื”ื™ืจืจื›ื™ื”, ืจืง ืชืœื•ืช.

ื“ื•ื’ืžื” ืฉืœ ื™ืขื“ ื›ืืฉืจ ื”ื•ื ืžื•ืคืขืœ (ืกืงื™ืจืช ืชื›ื•ื ื•ืช) ืขื ื”ืคืขืœืช ืกืงืจื™ืคื˜ ืื™ื ื˜ืจืืงื˜ื™ื‘ื™

ืชื™ืื•ืจ ื”ื™ืขื“ ืขืฆืžื•:

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, ื”ืฉืชืžืฉืชื™ ื‘ืืคืฉืจื•ืช ื”ื˜ืขื™ื ื” ื‘ืฉื‘ื™ืœ ื–ื”.

ื”ื”ืฉืงื” ื”ืกื•ืคื™ืช ื ืจืื™ืช ื›ืš:

  1. ื˜ื•ืขืŸ ื”ืืชื—ื•ืœ ืžืชื—ื™ืœ
  2. ื˜ื•ืขืŸ ื”ืืชื—ื•ืœ ืžืชื—ื™ืœ ืœื”ืคืขื™ืœ ืืช ื”ืงื•ืฉื—ื” ืขืœ ื™ื“ื™ ื”ืขื‘ืจืช ื”ืคืจืžื˜ืจ final.target
  3. Systemd ืžืชื—ื™ืœื” ืœื”ืคืขื™ืœ ืืช ื”ืžืขืจื›ืช. ืขื•ื‘ืจ ื‘ืจืฆืฃ ืืœ installer.target ืื• work.target ืž-basic.target ื“ืจืš ื”ืชืœื•ืช ืฉืœื”ื (ืœื“ื•ื’ืžื”, multi-user.target). ื”ืื—ืจื•ื ื™ื ืžื‘ื™ืื™ื ืืช ื”ืžืขืจื›ืช ืœืขื‘ื•ื“ื” ื‘ืžืฆื‘ ื”ืจืฆื•ื™

ื”ื›ื ืช ื”ืงื•ืฉื—ื” ืœื”ืคืขืœื”

ื‘ืขืช ื™ืฆื™ืจืช ืงื•ืฉื—ื”, ืชืžื™ื“ ืžืชืขื•ืจืจืช ื”ืžืฉื™ืžื” ืฉืœ ืฉื—ื–ื•ืจ ืžืฆื‘ ื”ืžืขืจื›ืช ื‘ืขืช ื”ืืชื—ื•ืœ ื•ืฉืžื™ืจืชื• ื‘ืขืช ื›ื™ื‘ื•ื™. ืžืฆื‘ ืคื™ืจื•ืฉื• ืงื‘ืฆื™ ืชืฆื•ืจื”, dump ื‘ืกื™ืก ื ืชื•ื ื™ื, ื”ื’ื“ืจื•ืช ืžืžืฉืง ื•ื›ื•'.

Systemd ืžืคืขื™ืœื” ืชื”ืœื™ื›ื™ื ื‘ืื•ืชื• ื™ืขื“ ื‘ืžืงื‘ื™ืœ. ืงื™ื™ืžื•ืช ืชืœื•ืช ื”ืžืืคืฉืจื•ืช ืœืš ืœืงื‘ื•ืข ืืช ืจืฆืฃ ื”ืืชื—ื•ืœ ืฉืœ ืกืงืจื™ืคื˜ื™ื.

ืื™ืš ื–ื” ืขื•ื‘ื“ ื‘ืคืจื•ื™ืงื˜ ืฉืœื™ ( https://habr.com/ru/post/477008/ https://github.com/skif-web/monitor)

  1. ื”ืžืขืจื›ืช ืžืชื—ื™ืœื”
  2. ื”ืฉื™ืจื•ืช settings_restore.service ืžื•ืคืขืœ. ื”ื•ื ื‘ื•ื“ืง ืืช ื ื•ื›ื—ื•ืชื• ืฉืœ ืงื•ื‘ืฅ settings.txt ื‘ืงื˜ืข ื”ื ืชื•ื ื™ื. ืื ื”ื•ื ืœื ืฉื, ืื– ืžื ื™ื—ื™ื ืงื•ื‘ืฅ ืขื–ืจ ื‘ืžืงื•ืžื•. ืœืื—ืจ ืžื›ืŸ, ื”ื’ื“ืจื•ืช ื”ืžืขืจื›ืช ืžืฉื•ื—ื–ืจื•ืช:
    • ืกื™ืกืžืช ืžื ื”ืœ
    • ืฉื ืžืืจื—,
    • ืื–ื•ืจ ื–ืžืŸ
    • ืžืงื•ืžื™
    • ืงื•ื‘ืข ืื ื›ืœ ื”ืžื“ื™ื” ื ืžืฆืืช ื‘ืฉื™ืžื•ืฉ. ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื’ื•ื“ืœ ื”ืชืžื•ื ื” ืงื˜ืŸ - ืœื ื•ื—ื•ืช ื”ืขืชืงื” ื•ื”ืงืœื˜ื” ืœืžื“ื™ื”. ื‘ืขืช ื”ืืชื—ื•ืœ, ื”ื•ื ื‘ื•ื“ืง ืื ื™ืฉ ืขื“ื™ื™ืŸ ืžืงื•ื ืœื ื‘ืฉื™ืžื•ืฉ. ืื ื™ืฉ, ื”ื“ื™ืกืง ืžื—ื•ืœืง ืžื—ื“ืฉ.
    • ื™ืฆื™ืจืช ืžื–ื”ื” ืžื›ื•ื ื” ืžื›ืชื•ื‘ืช MAC. ื–ื” ื—ืฉื•ื‘ ืœื”ืฉื’ืช ืื•ืชื” ื›ืชื•ื‘ืช ื‘ืืžืฆืขื•ืช DHCP
    • ื”ื’ื“ืจื•ืช ืจืฉืช
    • ืžื’ื‘ื™ืœ ืืช ื’ื•ื“ืœ ื”ื™ื•ืžื ื™ื
    • ื”ื›ื•ื ืŸ ื”ื—ื™ืฆื•ื ื™ ืžืชื›ื•ื ืŸ ืœืขื‘ื•ื“ื” (ืื ื”ืืคืฉืจื•ืช ื”ืžืชืื™ืžื” ืžื•ืคืขืœืช ื•ื”ื›ื•ื ืŸ ื—ื“ืฉ)
  3. ื”ืชื—ืœ postgresq
  4. ืฉื™ืจื•ืช ื”ืฉื—ื–ื•ืจ ืžืชื—ื™ืœ. ื–ื” ื ื—ื•ืฅ ื›ื“ื™ ืœื”ื›ื™ืŸ ืืช zabbix ืขืฆืžื• ื•ืืช ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœื•:
    • ื‘ื•ื“ืง ืื ื™ืฉ ื›ื‘ืจ ืžืกื“ ื ืชื•ื ื™ื ืฉืœ zabbix. ืื ืœื, ื”ื•ื ื ื•ืฆืจ ืž-dumps ืืชื—ื•ืœ (ื›ืœื•ืœ ืขื zabbix)
    • ื ื•ืฆืจืช ืจืฉื™ืžื” ืฉืœ ืื–ื•ืจื™ ื–ืžืŸ (ืฆืจื™ืš ืœื”ืฆื™ื’ ืื•ืชื ื‘ืžืžืฉืง ื”ืื™ื ื˜ืจื ื˜)
    • ื”-IP ื”ื ื•ื›ื—ื™ ื ืžืฆื, ื”ื•ื ืžื•ืฆื’ ื‘ื”ื ืคืงื” (ื”ื–ืžื ื” ืœื”ืชื—ื‘ืจ ืœืงื•ื ืกื•ืœื”)
  5. ื”ื”ื–ืžื ื” ืžืฉืชื ื” - ืžื•ืคื™ืข ื”ื‘ื™ื˜ื•ื™ Ready to work
  6. ื”ืงื•ืฉื—ื” ืžื•ื›ื ื” ืœืฉื™ืžื•ืฉ

ืงื‘ืฆื™ ื”ืฉื™ืจื•ืช ื—ืฉื•ื‘ื™ื, ื”ื ืืœื• ืฉืงื•ื‘ืขื™ื ืืช ืจืฆืฃ ื”ื”ืฉืงื” ืฉืœื”ื

[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 ื™ืชื—ื™ืœ.

ื•ื”ืฉื™ืจื•ืช ื”ืฉื ื™ (ื”ื›ื ืช 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 ื•-my setting_restore. ืื‘ืœ ืœืคื ื™ ืฉืžืชื—ื™ืœื™ื ืฉื™ืจื•ืชื™ zabbix.

ืฉื™ืจื•ืช ื˜ื™ื™ืžืจ ืขื‘ื•ืจ logrotate

Systemd ื™ื›ื•ืœ ืœื”ื—ืœื™ืฃ CRON. ื‘ืจืฆื™ื ื•ืช. ื™ืชืจื” ืžื›ืš, ื”ื“ื™ื•ืง ื”ื•ื ืœื ืขื“ ื”ื“ืงื”, ืืœื ืขื“ ื”ืฉื ื™ื™ื” (ืžื” ืื ื–ื” ื ื—ื•ืฅ). ืื• ืฉืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ื˜ื™ื™ืžืจ ืžื•ื ื•ื˜ื•ื ื™, ืฉื ืงืจื ืขืœ ื™ื“ื™ ืคืกืง ื–ืžืŸ ืžืื™ืจื•ืข.
ื–ื” ื”ื™ื” ื”ื˜ื™ื™ืžืจ ื”ืžื•ื ื•ื˜ื•ื ื™ ืฉืกื•ืคืจ ืืช ื”ื–ืžืŸ ืžืชื—ื™ืœืช ื”ืžื›ื•ื ื” ืฉื™ืฆืจืชื™.
ื–ื” ื™ื“ืจื•ืฉ 2 ืงื‘ืฆื™ื
logrotateTimer.service - ื”ืชื™ืื•ืจ ื‘ืคื•ืขืœ ืฉืœ ื”ืฉื™ืจื•ืช:

[Unit]
Description=run logrotate

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

ื–ื” ืคืฉื•ื˜ - ืชื™ืื•ืจ ืฉืœ ืคืงื•ื“ืช ื”ื”ืฉืงื”.
ื”ืงื•ื‘ืฅ ื”ืฉื ื™ logrotateTimer.timer ื”ื•ื ื”ืžืงื•ื ืฉื‘ื• ื”ื˜ื™ื™ืžืจื™ื ืขื•ื‘ื“ื™ื:

[Unit]
Description=Run logrotate

[Timer]
OnBootSec=15min
OnUnitActiveSec=15min

[Install]
WantedBy=timers.target

ืžื” ืคื”:

  • ืชื™ืื•ืจ ื˜ื™ื™ืžืจ
  • ืฉืขืช ื”ืชื—ืœื” ืจืืฉื•ื ื”, ื”ื—ืœ ืžืืชื—ื•ืœ ื”ืžืขืจื›ืช
  • ืชืงื•ืคื” ืฉืœ ื”ืฉืงื•ืช ื ื•ืกืคื•ืช
  • ืชืœื•ืช ื‘ืฉื™ืจื•ืช ื”ื˜ื™ื™ืžืจ. ืœืžืขืฉื”, ื–ื• ื”ืžื—ืจื•ื–ืช ืฉืขื•ืฉื” ืืช ื”ื˜ื™ื™ืžืจ

ืกืงืจื™ืคื˜ ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ ื‘ืขืช ื›ื™ื‘ื•ื™ ื•ื™ืขื“ ื”ื›ื™ื‘ื•ื™ ืฉืœืš

ื‘ืคื™ืชื•ื— ืื—ืจ, ื”ื™ื™ืชื™ ืฆืจื™ืš ืœืขืฉื•ืช ื’ืจืกื” ืžื•ืจื›ื‘ืช ื™ื•ืชืจ ืฉืœ ื›ื™ื‘ื•ื™ ื”ืžื›ื•ื ื” - ื“ืจืš ื”ืžื˜ืจื” ืฉืœื™, ืขืœ ืžื ืช ืœื‘ืฆืข ืคืขื•ืœื•ืช ืจื‘ื•ืช. ื‘ื“ืจืš ื›ืœืœ ืžื•ืžืœืฅ ืœื™ืฆื•ืจ ืฉื™ืจื•ืช oneshot ืขื ืืคืฉืจื•ืช 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 ืืคืฉืจื•ื™ื•ืช:

  • ื”ื—ืœืฃ ืืช ื”ืคืงื•ื“ื•ืช ื”ืืชื—ื•ืœ, ื”ื›ื™ื‘ื•ื™ ื•ืฉืืจ ื”ืคืงื•ื“ื•ืช (ื”ืŸ ืขื“ื™ื™ืŸ ืงื™ืฉื•ืจื™ ืกื™ืžื•ืœ ืœ-systemctl) ื‘ืกืงืจื™ืคื˜ ืฉืœืš. ื‘ืชื•ืš ื”ืกืงืจื™ืคื˜, ืขื‘ื•ืจ ืืœ my_shutdown.target. ื•ื”ืกืงืจื™ืคื˜ื™ื ื‘ืชื•ืš ื”ื™ืขื“ ืงื•ืจืื™ื ืœ-systemctl ื™ืฉื™ืจื•ืช, ืœืžืฉืœ, systemctl reboot
  • ืืคืฉืจื•ืช ืคืฉื•ื˜ื” ื™ื•ืชืจ, ืื‘ืœ ืื ื™ ืœื ืื•ื”ื‘ ืื•ืชื”. ื‘ื›ืœ ื”ืžืžืฉืงื™ื, ืื™ืŸ ืœื”ืชืงืฉืจ ืœ-shutdown/reboot/other, ืืœื ืœืงืจื•ื ื™ืฉื™ืจื•ืช ืœืžืขืจื›ืช ื”ื™ืขื“ ctl isolate my_shutdown.target

ื‘ื—ืจืชื™ ื‘ืืคืฉืจื•ืช ื”ืจืืฉื•ื ื”. ื‘-systemd, ืืชื—ื•ืœ ืžื—ื“ืฉ (ื›ืžื• poweroff) ื”ื ืงื™ืฉื•ืจื™ื ืกื™ืžืœื™ื™ื ืœ-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

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”