ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΠΎΠ΄ linux Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π·Π°Π΄Π°ΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ ΡΠΊΡΠΈΠΏΡΠΎΠ², Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΏΡΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΡΠΈΡΡΠ΅ΠΌΡ. Π system V ΡΡΠΎ Π΄Π΅Π»Π°Π»ΠΎΡΡ Π»Π΅Π³ΠΊΠΎ, Π½ΠΎ Ρ systemd Π²Π½ΠΎΡΠΈΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΠ²Ρ. ΠΠ°ΡΠΎ ΠΎΠ½ΠΎ ΡΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΡ.
ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ½Ρ target
Π§Π°ΡΡΠΎ ΠΏΠΈΡΡΡ, ΡΡΠΎ target ΡΠ»ΡΠΆΠ°Ρ Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ runlevel Π² system V -init. Π ΠΊΠΎΡΠ½Π΅ Π½Π΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½. ΠΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΏΠΎ Π³ΡΡΠΏΠΏΠ°ΠΌ ΠΈ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π³ΡΡΠΏΠΏΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Ρ Π½ΠΈΡ Π½Π΅Ρ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ, ΡΠΎΠ»ΡΠΊΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΡΠΈΠΌΠ΅Ρ target ΠΏΡΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ(ΠΎΠ±Π·ΠΎΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ) Ρ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΊΡΠΈΠΏΡΠ°
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ target:
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
ΠΠ°Π½Π½ΡΠΉ target Π·Π°ΠΏΡΡΡΠΈΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ 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 β target, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΈΠ΄ΡΠΈ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅. Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π·Π°ΠΏΡΡΠΊΠ° systemd ΠΏΡΠΎΠΉΠ΄ΡΡ ΠΏΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡ Π²ΡΡ Π½ΡΠΆΠ½ΠΎΠ΅.
ΠΡΠ±ΡΠ°ΡΡ final.target ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠΏΡΠΈΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ°.
ΠΡΠΎΠ³ΠΎΠ²ΡΠΉ Π·Π°ΠΏΡΡΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
- Π‘ΡΠ°ΡΡΡΠ΅Ρ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ
- ΠΠ°Π³ΡΡΠ·ΡΠΈΠΊ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ final.target
- Systemd Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π·Π°ΠΏΡΡΠΊ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ΄ΡΡ ΠΊ installer.target ΠΈΠ»ΠΈ work.target ΠΎΡ basic.target ΡΠ΅ΡΠ΅Π· ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,multi-user.target). ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Π² Π½ΡΠΆΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ ΠΊ Π·Π°ΠΏΡΡΠΊΡ
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΊ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π·Π°Π΄Π°ΡΠ° Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ ΠΈ Π΅Π³ΠΎ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠΈ ΠΏΡΠΈ Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ. ΠΠΎΠ΄ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π΄Π°ΠΌΠΏΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΈ ΡΠ΄.
Systemd Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΡΠ³Π΅ΡΠ΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ. ΠΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΊΡΠΈΠΏΡΠΎΠ².
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΌΠ΅Π½Ρ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ (
- Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΡΠ°ΡΡΡΠ΅Ρ
- ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ²ΠΈΡ settings_restore.service.ΠΠ½ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π° settings.txt Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ. ΠΡΠ»ΠΈ Π΅Π³ΠΎ Π½Π΅Ρ, ΡΠΎ Π½Π° Π΅Π³ΠΎ ΠΌΠ΅ΡΡΠΎ ΠΊΠ»Π°Π΄ΡΡΡΡ ΡΡΠ°Π»ΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ».ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΡΠΈΡΡΠ΅ΠΌΡ:
- ΠΏΠ°ΡΠΎΠ»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°
- hostname,
- ΡΠ°ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΡ
- Π»ΠΎΠΊΠ°Π»Ρ
- ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Π²Π΅ΡΡ Π»ΠΈ Π½ΠΎΡΠΈΡΠ΅Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠ±ΡΠ°Π·Π° Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ β Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π½Π° Π½ΠΎΡΠΈΡΠ΅Π»Ρ. ΠΡΠΈ ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ β Π΅ΡΡΡ Π»ΠΈ Π΅ΡΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ. ΠΡΠ»ΠΈ Π΅ΡΡΡ β Π΄ΠΈΡΠΊ ΠΏΠ΅ΡΠ΅ΡΠ°Π·Π±ΠΈΠ²Π°Π΅ΡΡΡ.
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ machine-id ΠΈΠ· MAC-Π°Π΄ΡΠ΅ΡΠ°. ΠΡΠΎ Π²Π°ΠΆΠ½ΠΎ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΠΏΠΎ DHCP
- ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅ΡΠΈ
- ΠΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π»ΠΎΠ³ΠΎΠ²
- ΠΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΊ ΡΠ°Π±ΠΎΡΠ° Π²Π½Π΅ΡΠ½ΠΈΠΉ Π΄ΠΈΡΠΊ(Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΠΎΠΏΡΠΈΡ ΠΈ Π΄ΠΈΡΠΊ Π½ΠΎΠ²ΡΠΉ)
- ΠΠ°ΠΏΡΡΠΊΠ°ΡΡΡΡ postgresq
- Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ²ΠΈΡ restore. ΠΠ½ Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ zabbix ΠΈ Π΅Π³ΠΎ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
:
- ΠΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ, Π΅ΡΡΡ Π»ΠΈ ΡΠΆΠ΅ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ zabbix. ΠΡΠ»ΠΈ Π½Π΅Ρ β ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΈΠ· ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΡ Π΄Π°ΠΌΠΏΠΎΠ²(ΠΈΠ΄ΡΡ Π² ΠΏΠΎΡΡΠ°Π²ΠΊΠ΅ zabbix)
- ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΡΠΎΠ²ΡΡ ΠΏΠΎΡΡΠΎΠ² (Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΠΈΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² web-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅)
- ΠΠ°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ IP, ΠΎΠ½ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π² issue (ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π²Ρ ΠΎΠ΄Π° Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ)
- ΠΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ β ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π·Π° 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
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, Ρ ΠΏΠΎΡΡΠ°Π²ΠΈΠ» Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΡΡΠΎ Π±Ρ ΡΠ½Π°ΡΠ°Π»Π° ΠΎΡΡΠ°Π±ΠΎΡΠ°Π» ΠΌΠΎΠΉ ΡΠΊΡΠΈΠΏΡ, Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π»Π°ΡΡ ΡΠ΅ΡΡ ΠΈ ΡΡΠ°ΡΡΠΎΠ²Π°Π»Π° Π‘Π£ΠΠ.
Π Π²ΡΠΎΡΠΎΠΉ ΡΠ΅ΡΠ²ΠΈΡ(ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° 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 ΠΈ ΠΌΠΎΠ΅Π³ΠΎ 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 Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ. ΠΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ service.
ΠΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ target, ΡΡΠΎ Π±Ρ ΠΈΠΌΠ΅ΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ Π² ΡΠ°Π±ΠΎΡΠ΅ ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ.
ΠΠ΄Π½Π°ΠΊΠΎ, ΡΠ°ΠΌΠΎΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ Π±ΡΠ»ΠΎ ΠΏΠΎΡΠΎΠΌ. ΠΠ°ΡΠΈΠ½Ρ ΠΆΠ΅ Π½Π°Π΄ΠΎ Π²ΡΠΊΠ»ΡΡΠΈΡΡ/ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΡΡ. Π ΡΡΡ Π΅ΡΡΡ 2 Π²Π°ΡΠΈΠ°Π½ΡΠ°:
- ΠΠ°ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ reboot,shutdown ΠΈ ΠΏΡΠΎΡΠΈΠ΅(ΠΎΠ½ΠΈ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΡΠ²Π»ΡΡΡΡΡ ΡΠΈΠΌΠ»ΠΈΠ½ΠΊΠ°ΠΌΠΈ Π½Π° systemctl) Π½Π° ΡΠ²ΠΎΠΉ ΡΠΊΡΠΈΠΏΡ.ΠΠ½ΡΡΡΠΈ ΡΠΊΡΠΈΠΏΡΠ° β ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π² my_shutdown.target. Π ΡΠΊΡΠΈΠΏΡΡ Π²Π½ΡΡΡΠΈ ΡΠ°ΡΠ³Π΅ΡΠ° ΠΏΠΎΡΠΎΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡ Π½Π°ΠΏΡΡΠΌΡΡ systemctl, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, systemctl reboot
- ΠΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ, Π½ΠΎ ΠΌΠ½Π΅ Π½Π΅ Π½ΡΠ°Π²ΡΡΠΈΠΉΡΡ Π²Π°ΡΠΈΠ°Π½Ρ. ΠΠΎ Π²ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ Π½Π΅ shutdown/reboot/ΠΏΡΠΎΡΠΈΠ΅, Π° Π½Π°ΠΏΡΡΠΌΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ°ΡΠ³Π΅Ρ systemctl isolate my_shutdown.target
Π― Π²ΡΠ±ΡΠ°Π» ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ. Π systemd reboot(ΠΊΠ°ΠΊ ΠΈ poweroff) ΡΠ²Π»ΡΡΡΡΡ ΡΠΈΠΌΠ»ΠΈΠ½ΠΊΠ°ΠΌΠΈ Π½Π° systemd.
ls -l /sbin/poweroff
lrwxrwxrwx 1 root root 14 ΡΠ΅Π½ 30 18:23 /sbin/poweroff -> /bin/systemctl
ΠΠΎΡΡΠΎΠΌΡ ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π° ΡΠ²ΠΎΠΈ ΡΠΊΡΠΈΠΏΡΡ:
reboot
#!/bin/sh
touch /tmp/reboot
sudo systemctl isolate my_shutdown.target
fi
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com