แจแแกแแแแแ
Linux-แแกแแแแก แจแแแฃแจแแแแแแกแแก แฉแแแแแ แแแขแแ แแฅแขแแฃแแ แกแแ แแแขแแแแก แจแแฅแแแแก แแแแชแแแ, แ แแแแแแแช แจแแกแ แฃแแแแแ แกแแกแขแแแแก แฉแแ แแแแก แแ แแแแแ แแแแกแแก. V system-แจแ แแก แแแ แขแแแ แแงแ, แแแแ แแ systemd-แแ แแก แแแแแแแก แแแ แแฅแขแแ แแแแก. แแแแ แแ แแแก แจแแแซแแแแ แฐแฅแแแแแก แกแแแฃแแแ แ แขแแแแแ แ.
แ แแขแแ แแแญแแ แแแแ แแแแแแแ?
แฎแจแแ แแ แฌแแ แแ, แ แแ แกแแแแแแ แแแกแแฎแฃแ แแแ 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-แแก แแ แฉแแแแก แกแฎแแแแแกแฎแแ แแแ แแ แกแแแแแก, แแแแกแแแแก แแแแแแแงแแแ loader แแแ แแแแขแ.
แกแแแแแแ แแแจแแแแ แแกแ แแแแแแงแฃแ แแแ:
- แฉแแแขแแแ แแแแแ แแฌแงแแแ
- แฉแแแขแแแ แแแแแ แแฌแงแแแก firmware-แแก แแแจแแแแแก final.target แแแ แแแแขแ แแก แแแแแชแแแแ
- Systemd แแฌแงแแแก แกแแกแขแแแแก แแแจแแแแแก. แแแแแแแแแแ แฃแแแ แแแแแก installer.target แแ work.target-แแแ basic.target แแแแ แแแแแแแแแแฃแแแแแแแก แแแจแแแแแแ (แแแแแแแแแ, multi-user.target). แแก แฃแแแแแกแแแแแ แกแแกแขแแแแก แกแแกแฃแ แแแ แ แแแแแจแ แแแฃแจแแแแแก
แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแแก แแแแแแแแแ แแแจแแแแแกแแแแก
แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแแก แจแแฅแแแแกแแก, แงแแแแแแแแก แฉแแแแแ แแแแชแแแ แกแแกแขแแแแก แแแแแแแ แแแแแก แแฆแแแแแ แแแจแแแแแกแแก แแ แแแกแ แจแแแแฎแแ แแแแแ แแแแกแแก. แกแแฎแแแแฌแแคแ แแแจแแแแก แแแแคแแแฃแ แแชแแแก แคแแแแแแก, แแแแแชแแแแ แแแแแก แแแแแแฌแแ แแแก, แแแขแแ แคแแแกแแก แแแ แแแแขแ แแแก แแ แ.แจ.
Systemd แแฌแแ แแแแแก แแ แแชแแกแแแก แแแแแ แกแแแแแแแจแ แแแ แแแแแฃแ แแ. แแ แกแแแแแก แแแแแแแแแแฃแแแแแแ, แ แแแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแแกแแแฆแแ แแ แกแแ แแแขแแแแก แแแจแแแแแก แแแแแแแแแแ แแแ.
แ แแแแ แแฃแจแแแแก แแก แฉแแแก แแ แแแฅแขแจแ (
- แกแแกแขแแแ แแฌแงแแแ
- แแแจแแแแฃแแแ settings_restore.service แกแแ แแแกแ, แ แแแแแแช แแแแฌแแแแก settings.txt แคแแแแแก แแ แกแแแแแแก แแแแแชแแแแ แแแแงแแคแแแแแแจแ. แแฃ แแก แแฅ แแ แแ แแก, แแแจแแ แแแก แแแแแแแก แแแแแแกแแแฃแแแ แกแแชแแแแแ แ แคแแแแ. แจแแแแแ แแฆแแแแแ แกแแกแขแแแแก แแแ แแแแขแ แแแ:
- แแแแแแแกแขแ แแขแแ แแก แแแ แแแ
- แแแกแแแแซแแแก แกแแฎแแแ,
- แแ แแแก แกแแ แขแงแแแ
- แแแแแแ
- แแแแแแก, แแแแแแงแแแแแ แแฃ แแ แ แงแแแแ แแแแแ. แแแแฃแแแกแฎแแแแแ, แกแฃแ แแแแก แแแแ แแชแแ แแ - แแแแแแจแ แแแแแ แแแแกแ แแ แฉแแฌแแ แแก แแแกแแแแแแแแแแแ. แแแจแแแแแกแแก แแก แแแแฌแแแแก, แแ แแก แแฃ แแ แ แแแแแฃแงแแแแแแแ แแแแแแ. แแฃ แแ แกแแแแแก, แแแกแแ แแแแแแแฌแแแแแแ.
- แแแแ แแขแแก ID-แแก แแแแแ แแ แแแ MAC แแแกแแแแ แแแแแ. แแก แแแแจแแแแแแแแแแ DHCP-แแ แแแแแ แแแกแแแแ แแแก แแแกแแฆแแแแ
- แฒฅแกแแแแก แแแ แแแแขแ แแแ
- แแฆแฃแแแแก แแแ แแแแก แแแแแก
- แแแ แ แแแกแแ แแแแแแแแ แกแแแฃแจแแแ (แแฃ แจแแกแแแแแแกแ แแแ แแแแขแ แฉแแ แแฃแแแ แแ แแแกแแ แแฎแแแแ)
- แแแแฌแงแแ postgresq
- แแฆแแแแแแก แกแแ แแแกแ แแฌแงแแแ. แกแแญแแ แแ แแแแแ zabbix-แแกแ แแ แแแกแ แแแแแชแแแแ แแแแแก แแแกแแแแแแแแแแ:
- แแแแฌแแแแก แแ แแก แแฃ แแ แ แฃแแแ zabbix แแแแแชแแแแ แแแแ. แแฃ แแ แ, แแก แแฅแแแแแ แแแแชแแแแแแแชแแแก แแแแแแกแแงแ แแแแแแแแ (แแแงแแแแ zabbix)
- แแฅแแแแแ แแ แแแก แแแแแแแก แกแแ (แกแแญแแ แแ แแแ แแแขแแ แคแแแกแจแ แแแแ แฉแแแแแแแกแแแแก)
- แแแแแแแแ แแแแแแแแแแแ IP, แแก แแแฉแแแแแแแ แแแแแจแแแแแจแ (แแแฌแแแแ แแแแกแแแจแ แจแแกแแกแแแแแแ)
- แแแฌแแแแ แแชแแแแแ - แฉแแแแแ แคแ แแแ Ready to work
- firmware แแแแ แแ แแก แแแแแกแแงแแแแแแแ
แกแแ แแแกแแก แคแแแแแแ แแแแจแแแแแแแแแแ, แกแฌแแ แแ แแกแแแ แแแแแแแ แแแแ แแแจแแแแแก แแแแแแแแแแ แแแแก
[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-แแก แแ แฉแแแ setting_restore-แแก แแแฌแงแแแแก แจแแแแแ. แแฆแแแ zabbix แกแแ แแแกแแแแก แแแฌแงแแแแแแ.
แขแแแแแ แแก แกแแ แแแกแ แแแแแ แแขแแกแแแแก
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.แกแแแแแแ
[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
- แแ แกแแ แแแขแแก แจแแแแแ แแแกแ แฃแแแ แกแแญแแ แ แแแฅแแแแแแแแก. แแฅแแแ แจแแแแซแแแแ แแแแแแขแแ แแ แแแแแ แกแแ แแแขแ แแแแแแจแ แแแฅแแแแแแแกแ แแ แแแฎแแ แฎแแแฃแแแแแกแแแแก:
แฉแแแ_แแแแแ แแแ.แจ
#!/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 แคแแแแแแแก แแแแแงแแแแแแ. แแฅแแแ แแ แจแแแแซแแแแ แแแ แแแแ แกแแแแแแ แแแ แแแแขแ แแแแ. แจแแกแแซแแแแแแแ แแฎแแแแ แกแแ แแแกแ.
แแแแ แแ แแ แแแงแแแแ แกแแแแแแแก, แ แแ แแฅแแแแแก แแแฅแแแแแแ แกแแแฃแจแแแจแ แแ แแแ แแแขแแ แแแฃแแ แแแฅแแแแแแแแแก แแแแแแแแแแ แแแ.
แแฃแแชแ, แงแแแแแแ แกแแแแขแแ แแกแ แแแแแแแแแแแ แแแฎแแ. แกแแญแแ แแ แแแแ แแขแแก แแแแแ แแแ/แแแแแขแแแ แแแ. แแ แแ แแก 2 แแแ แแแแขแ:
- แฉแแแแแชแแแแ แแแแแขแแแ แแแ, แแแแแ แแแ แแ แกแฎแแ แแ แซแแแแแแแ (แแกแแแ แฏแแ แแแแแ systemctl-แแก แกแแแแแแแ) แแฅแแแแ แกแแ แแแขแแ. แกแแ แแแขแแก แจแแแแแ แแแแแแแ my_shutdown.target-แแ. แแ แกแแ แแแขแแแ แกแแแแแแแก แจแแแแแ, แจแแแแแ แแแ แแแแแ แฃแฌแแแแแก systemctl-แก, แแแแแแแแแ, systemctl แแแแแขแแแ แแแแก
- แฃแคแ แ แแแ แขแแแ แแแ แแแแขแแ, แแแแ แแ แแ แแแแฌแแแก. แงแแแแ แแแขแแ แคแแแกแจแ แแฃ แแแแแแซแแฎแแแ shutdown/reboot/other, แแ แแแแ แแแ แแแแแ แแแ แแแแ แกแแแแแแ แกแแกแขแแแแกctl isolate my_shutdown.target
แแ แแแแ แฉแแ แแแ แแแแ แแแ แแแแขแ. systemd-แจแ แแแแแขแแแ แแแ (แ แแแแ แช poweroff) แแ แแก symlinks 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