ืืืื
ืืขืช ืคืืชืื ืขืืืจ ืืื ืืงืก, ืืชืขืืจืจืช ืืืฉืืื ืฉื ืืฆืืจืช ืกืงืจืืคืืื ืืื ืืจืืงืืืืืื ืืืืคืขืืื ืืืฉืจ ืืืขืจืืช ืืืคืขืืช ืื ืืืืืื. ืืืขืจืืช 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, ืืฉืชืืฉืชื ืืืคืฉืจืืช ืืืขืื ื ืืฉืืื ืื.
ืืืฉืงื ืืกืืคืืช ื ืจืืืช ืื:
- ืืืขื ืืืชืืื ืืชืืื
- ืืืขื ืืืชืืื ืืชืืื ืืืคืขืื ืืช ืืงืืฉืื ืขื ืืื ืืขืืจืช ืืคืจืืืจ final.target
- Systemd ืืชืืืื ืืืคืขืื ืืช ืืืขืจืืช. ืขืืืจ ืืจืฆืฃ ืื installer.target ืื work.target ื-basic.target ืืจื ืืชืืืช ืฉืืื (ืืืืืื, multi-user.target). ืืืืจืื ืื ืืืืืื ืืช ืืืขืจืืช ืืขืืืื ืืืฆื ืืจืฆืื
ืืื ืช ืืงืืฉืื ืืืคืขืื
ืืขืช ืืฆืืจืช ืงืืฉืื, ืชืืื ืืชืขืืจืจืช ืืืฉืืื ืฉื ืฉืืืืจ ืืฆื ืืืขืจืืช ืืขืช ืืืชืืื ืืฉืืืจืชื ืืขืช ืืืืื. ืืฆื ืคืืจืืฉื ืงืืฆื ืชืฆืืจื, dump ืืกืืก ื ืชืื ืื, ืืืืจืืช ืืืฉืง ืืื'.
Systemd ืืคืขืืื ืชืืืืืื ืืืืชื ืืขื ืืืงืืื. ืงืืืืืช ืชืืืช ืืืืคืฉืจืืช ืื ืืงืืืข ืืช ืจืฆืฃ ืืืชืืื ืฉื ืกืงืจืืคืืื.
ืืื ืื ืขืืื ืืคืจืืืงื ืฉืื (
- ืืืขืจืืช ืืชืืืื
- ืืฉืืจืืช settings_restore.service ืืืคืขื. ืืื ืืืืง ืืช ื ืืืืืชื ืฉื ืงืืืฅ settings.txt ืืงืืข ืื ืชืื ืื. ืื ืืื ืื ืฉื, ืื ืื ืืืื ืงืืืฅ ืขืืจ ืืืงืืื. ืืืืจ ืืื, ืืืืจืืช ืืืขืจืืช ืืฉืืืืจืืช:
- ืกืืกืืช ืื ืื
- ืฉื ืืืจื,
- ืืืืจ ืืื
- ืืงืืื
- ืงืืืข ืื ืื ืืืืื ื ืืฆืืช ืืฉืืืืฉ. ืืืจืืจืช ืืืื, ืืืื ืืชืืื ื ืงืื - ืื ืืืืช ืืขืชืงื ืืืงืืื ืืืืื. ืืขืช ืืืชืืื, ืืื ืืืืง ืื ืืฉ ืขืืืื ืืงืื ืื ืืฉืืืืฉ. ืื ืืฉ, ืืืืกืง ืืืืืง ืืืืฉ.
- ืืฆืืจืช ืืืื ืืืื ื ืืืชืืืช MAC. ืื ืืฉืื ืืืฉืืช ืืืชื ืืชืืืช ืืืืฆืขืืช DHCP
- ืืืืจืืช ืจืฉืช
- ืืืืื ืืช ืืืื ืืืืื ืื
- ืืืื ื ืืืืฆืื ื ืืชืืื ื ืืขืืืื (ืื ืืืคืฉืจืืช ืืืชืืืื ืืืคืขืืช ืืืืื ื ืืืฉ)
- ืืชืื postgresq
- ืฉืืจืืช ืืฉืืืืจ ืืชืืื. ืื ื ืืืฅ ืืื ืืืืื ืืช zabbix ืขืฆืื ืืืช ืืกื ืื ืชืื ืื ืฉืื:
- ืืืืง ืื ืืฉ ืืืจ ืืกื ื ืชืื ืื ืฉื zabbix. ืื ืื, ืืื ื ืืฆืจ ื-dumps ืืชืืื (ืืืื ืขื zabbix)
- ื ืืฆืจืช ืจืฉืืื ืฉื ืืืืจื ืืื (ืฆืจืื ืืืฆืื ืืืชื ืืืืฉืง ืืืื ืืจื ื)
- ื-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 ืืชืืื.
ืืืฉืืจืืช ืืฉื ื (ืืื ืช 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