Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π·Π° Linux Π²ΡΠ·Π½ΠΈΠΊΠ²Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΏΡΠΈ Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°. Π system V ΡΠΎΠ²Π° Π±Π΅ΡΠ΅ Π»Π΅ΡΠ½ΠΎ, Π½ΠΎ ΡΡΡ systemd ΠΏΡΠ°Π²ΠΈ ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈ. ΠΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΠΈ.
ΠΠ°ΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ ΡΠ΅Π»ΠΈ?
Π§Π΅ΡΡΠΎ ΡΠ΅ ΠΏΠΈΡΠ΅, ΡΠ΅ target ΡΠ»ΡΠΆΠΈ ΠΊΠ°ΡΠΎ Π°Π½Π°Π»ΠΎΠ³ Π½Π° 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). ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΏΡΠΈΠ²Π΅ΠΆΠ΄Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π² ΠΆΠ΅Π»Π°Π½ΠΈΡ ΡΠ΅ΠΆΠΈΠΌ
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° ΡΡΡΠΌΡΠ΅ΡΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅
ΠΠΎΠ³Π°ΡΠΎ ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ ΡΡΡΠΌΡΠ΅Ρ, Π²ΠΈΠ½Π°Π³ΠΈ Π²ΡΠ·Π½ΠΈΠΊΠ²Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° Π΄Π° ΡΠ΅ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΠΈ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΠΈ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠ°Π·ΠΈ ΠΏΡΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅. Π‘ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π΄ΡΠΌΠΏΠΎΠ²Π΅ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈ Ρ.Π½.
Systemd ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΏΡΠΎΡΠ΅ΡΠΈ Π² Π΅Π΄Π½Π° ΠΈ ΡΡΡΠ° ΡΠ΅Π» ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ. ΠΠΌΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΡΡΠ°ΡΡΠΎΠ²Π°ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ΡΠ΅.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ Π² ΠΌΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ (
- Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΡΠ°ΡΡΠΈΡΠ°
- Π‘ΡΠ°ΡΡΠΈΡΠ° ΡΠ΅ ΡΡΠ»ΡΠ³Π°ΡΠ° settings_restore.service, ΠΊΠΎΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Π·Π° Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΉΠ»Π° settings.txt Π² ΡΠ΅ΠΊΡΠΈΡΡΠ° Ρ Π΄Π°Π½Π½ΠΈ. ΠΠΊΠΎ Π½Π΅ Π΅ ΡΠ°ΠΌ, ΡΠΎΠ³Π°Π²Π° Π½Π° ΠΌΡΡΡΠΎΡΠΎ ΠΌΡ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Ρ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ΅Π½ ΡΠ°ΠΉΠ» Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Ρ:
- Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠ° ΠΏΠ°ΡΠΎΠ»Π°
- ΠΈΠΌΠ΅ Π½Π° Ρ ΠΎΡΡ,
- ΡΠ°ΡΠΎΠ²Π° Π·ΠΎΠ½Π°
- Π»ΠΎΠΊΠ°Π»
- ΠΠΏΡΠ΅Π΄Π΅Π»Ρ Π΄Π°Π»ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π²ΡΠΈΡΠΊΠΈ Π½ΠΎΡΠΈΡΠ΅Π»ΠΈ. ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ°Π·ΠΌΠ΅ΡΡΡ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅ ΠΌΠ°Π»ΡΠΊ - Π·Π° Π»Π΅ΡΠ½ΠΎ ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ ΠΈ Π·Π°ΠΏΠΈΡ Π½Π° Π½ΠΎΡΠΈΡΠ΅Π». ΠΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΡΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Π΄Π°Π»ΠΈ Π²ΡΠ΅ ΠΎΡΠ΅ ΠΈΠΌΠ° Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ ΠΌΡΡΡΠΎ. ΠΠΊΠΎ ΠΈΠΌΠ°, Π΄ΠΈΡΠΊΡΡ ΡΠ΅ ΠΏΡΠ΅ΡΠ°Π·Π΄Π΅Π»Ρ.
- ΠΠ΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΎΡ MAC Π°Π΄ΡΠ΅Ρ. Π’ΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΡΡΠΈΡ Π°Π΄ΡΠ΅Ρ ΡΡΠ΅Π· DHCP
- ΠΡΠ΅ΠΆΠΎΠ²ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
- ΠΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΡΡΡΠΏΠΈΡΠ΅
- ΠΡΠ½ΡΠ½ΠΎΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Ρ Π·Π° ΡΠ°Π±ΠΎΡΠ° (Π°ΠΊΠΎ ΡΡΠΎΡΠ²Π΅ΡΠ½Π°ΡΠ° ΠΎΠΏΡΠΈΡ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ Π΅ Π½ΠΎΠ²ΠΎ)
- Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ postgresq
- Π£ΡΠ»ΡΠ³Π°ΡΠ° Π·Π° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ ΡΡΠ°ΡΡΠΈΡΠ°. ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΅ Π΄Π° ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΠΈΡΠ΅ ΡΠ°ΠΌΠΈΡ zabbix ΠΈ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ:
- ΠΡΠΎΠ²Π΅ΡΡΠ²Π° Π΄Π°Π»ΠΈ Π²Π΅ΡΠ΅ ΠΈΠΌΠ° zabbix Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. ΠΠΊΠΎ Π½Π΅, ΡΠΎΠΉ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° ΠΎΡ Π΄ΡΠΌΠΏΠΎΠ²Π΅ Π·Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ (Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ ΡΡΡ 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
ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΌΠΎΡΡ ΡΠΊΡΠΈΠΏΡ ΠΏΡΡΠ²ΠΎ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΈ Π΅Π΄Π²Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΌΡΠ΅ΠΆΠ°ΡΠ° Π΄Π° ΡΠ΅ ΠΊΠ°ΡΠΈ ΠΈ Π‘Π£ΠΠ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°.
Π Π²ΡΠΎΡΠ°ΡΠ° ΡΡΠ»ΡΠ³Π° (ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° 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.
Π’Π°ΠΉΠΌΠ΅Ρ ΡΡΠ»ΡΠ³Π° Π·Π° 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
ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠΌΠ° ΡΡΠΊ:
- ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ°ΠΉΠΌΠ΅ΡΠ°
- ΠΡΡΠ²ΠΎ Π½Π°ΡΠ°Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅, Π·Π°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ ΠΎΡ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°
- ΠΏΠ΅ΡΠΈΠΎΠ΄ Π½Π° ΡΠ»Π΅Π΄Π²Π°ΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈΡ
- ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΡΠ»ΡΠ³Π°ΡΠ° Π½Π° ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΠΡΡΡΠ½ΠΎΡΡ ΡΠΎΠ²Π° Π΅ Π½ΠΈΠ·ΡΡ, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ°Π²ΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΠ°
ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π΅Π½ ΡΠΊΡΠΈΠΏΡ ΠΏΡΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅ ΠΈ Π²Π°ΡΠ°ΡΠ° ΡΠ΅Π» Π·Π° ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅
Π Π΄ΡΡΠ³Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²Ρ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½Π° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° - ΠΏΡΠ΅Π· ΡΠΎΠ±ΡΡΠ²Π΅Π½Π°ΡΠ° ΠΌΠΈ ΡΠ΅Π», Π·Π° Π΄Π° ΠΈΠ·Π²ΡΡΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ Π΅Π΄Π½ΠΎΠΊΡΠ°ΡΠ½Π° ΡΡΠ»ΡΠ³Π° Ρ ΠΎΠΏΡΠΈΡΡΠ° 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 Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ. ΠΡΠ·ΠΌΠΎΠΆΠ΅Π½ Π΅ ΡΠ°ΠΌΠΎ ΡΠ΅ΡΠ²ΠΈΠ·.
ΠΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ target, Π·Π° Π΄Π° ΠΈΠΌΠ°ΠΌ Π³ΡΠ²ΠΊΠ°Π²ΠΎΡΡ Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°Π½ ΡΠ΅Π΄ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡΠ°.
ΠΠ°ΠΉ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΡΠΎ ΠΎΠ±Π°ΡΠ΅ Π΄ΠΎΠΉΠ΄Π΅ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ. ΠΠ°ΡΠΈΠ½Π°ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠΈ/ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°. Π ΠΈΠΌΠ° 2 ΠΎΠΏΡΠΈΠΈ:
- ΠΠ°ΠΌΠ΅Π½Π΅ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ Π·Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅, ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅ ΠΈ Π΄ΡΡΠ³ΠΈ (ΡΠ΅ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»Π½ΠΈ Π²ΡΡΠ·ΠΊΠΈ ΠΊΡΠΌ systemctl) Ρ Π²Π°ΡΠΈΡ ΡΠΊΡΠΈΠΏΡ. ΠΡΡΡΠ΅ Π² ΡΠΊΡΠΈΠΏΡΠ° ΠΎΡΠΈΠ΄Π΅ΡΠ΅ Π½Π° my_shutdown.target. Π ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ΡΠ΅ Π²ΡΡΡΠ΅ Π² ΡΠ΅Π»ΡΠ° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ systemctl, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ systemctl reboot
- ΠΠΎ-ΠΏΡΠΎΡΡ Π²Π°ΡΠΈΠ°Π½Ρ, Π½ΠΎ Π½Π΅ ΠΌΠΈ Ρ Π°ΡΠ΅ΡΠ²Π°. ΠΡΠ² Π²ΡΠΈΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ Π½Π΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΉΡΠ΅ shutdown/reboot/other, Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ°ΠΉΡΠ΅ ΡΠ΅Π»Π΅Π²ΠΈΡ systemctl 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