рдкрд░рд┐рдЪрдп
рд▓рд┐рдирдХреНрд╕рд╕рд╛рдареА рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддрд╛рдирд╛, рд╕рд┐рд╕реНрдЯреАрдо рдЪрд╛рд▓реВ рдХрд┐рдВрд╡рд╛ рдмрдВрдж рдХреЗрд▓реНрдпрд╛рд╡рд░ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреЗ рдХрд╛рд░реНрдп рдЙрджреНрднрд╡рддреЗ. рд╕рд┐рд╕реНрдЯрдо V рдордзреНрдпреЗ рд╣реЗ рд╕реЛрдкреЗ рд╣реЛрддреЗ, рдкрд░рдВрддреБ 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 рдирд┐рд╡рдбрдгреНрдпрд╛рдЪреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реЗ рдорд╛рд░реНрдЧ рдЖрд╣реЗрдд, рдпрд╛рд╕рд╛рдареА рдореА рд▓реЛрдбрд░ рдкрд░реНрдпрд╛рдп рд╡рд╛рдкрд░рд▓рд╛.
рдЕрдВрддрд┐рдо рдкреНрд░рдХреНрд╖реЗрдкрдг рдЕрд╕реЗ рджрд┐рд╕рддреЗ:
- рдмреВрдЯрд▓реЛрдбрд░ рд╕реБрд░реВ рд╣реЛрддреЗ
- рдмреВрдЯрд▓реЛрдбрд░ final.target рдкреЕрд░рд╛рдореАрдЯрд░ рдкрд╛рд░ рдХрд░реВрди рдлрд░реНрдорд╡реЗрдЕрд░ рд▓рд╛рдБрдЪ рдХрд░рдгреНрдпрд╛рд╕ рд╕реБрд░рд╡рд╛рдд рдХрд░рддреЛ
- Systemd рдкреНрд░рдгрд╛рд▓реА рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рдХрд░рддреЗ. рдЕрдиреБрдХреНрд░рдореЗ installer.target рдХрд┐рдВрд╡рд╛ base.target рд╡рд░реВрди work.target рд╡рд░ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЕрд╡рд▓рдВрдмрдирд╛рдВрджреНрд╡рд╛рд░реЗ рдЬрд╛рддреЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, multi-user.target). рдирдВрддрд░рдЪреЗ рд╕рд┐рд╕реНрдЯрдорд▓рд╛ рдЗрдЪреНрдЫрд┐рдд рдореЛрдбрдордзреНрдпреЗ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрддреЗ
рд▓реЙрдиреНрдЪрд╕рд╛рдареА рдлрд░реНрдорд╡реЗрдЕрд░ рддрдпрд╛рд░ рдХрд░рдд рдЖрд╣реЗ
рдлрд░реНрдорд╡реЗрдЕрд░ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛, рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрдЪреНрдпрд╛ рд╡реЗрд│реА рд╕рд┐рд╕реНрдЯрдо рд╕реНрдерд┐рддреА рдкреБрдирд░реНрд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдмрдВрдж рдХрд░рддрд╛рдирд╛ рддреЗ рдЬрддрди рдХрд░рдгреНрдпрд╛рдЪреЗ рдХрд╛рд░реНрдп рдиреЗрд╣рдореАрдЪ рдЙрджреНрднрд╡рддреЗ. рд╕реНрдЯреЗрдЯ рдореНрд╣рдгрдЬреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓реНрд╕, рдбреЗрдЯрд╛рдмреЗрд╕ рдбрдВрдк, рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдЗ.
Systemd рд╕рдорд╛рди рд▓рдХреНрд╖реНрдпрд╛рдордзреНрдпреЗ рд╕рдорд╛рдВрддрд░рдкрдгреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд▓рд╡рддреЗ. рдЕрд╢реА рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡реЗ рдЖрд╣реЗрдд рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪрд╛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреНрд░рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд.
рдорд╛рдЭреНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдд рддреЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ (
- рдпрдВрддреНрд░рдгрд╛ рд╕реБрд░реВ рд╣реЛрддреЗ
- settings_restore.service рд╕реЗрд╡рд╛ рд╕реБрд░реВ рдХреЗрд▓реА рдЖрд╣реЗ. рддреА рдбреЗрдЯрд╛ рд╡рд┐рднрд╛рдЧрд╛рдд settings.txt рдлрд╛рдЗрд▓рдЪреА рдЙрдкрд╕реНрдерд┐рддреА рддрдкрд╛рд╕рддреЗ. рдЬрд░ рддреЗ рддреЗрдереЗ рдирд╕реЗрд▓, рддрд░ рддреНрдпрд╛рдЪреНрдпрд╛ рдЬрд╛рдЧреА рдПрдХ рд╕рдВрджрд░реНрдн рдлрд╛рдЗрд▓ рдареЗрд╡рд▓реА рдЬрд╛рддреЗ. рдкреБрдвреЗ, рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдкреБрдирд░реНрд╕рдВрдЪрдпрд┐рдд рдХреЗрд▓реА рдЬрд╛рддрд╛рдд:
- рдкреНрд░рд╢рд╛рд╕рдХ рдкрд╛рд╕рд╡рд░реНрдб
- рд╣реЛрд╕реНрдЯрдирд╛рд╡,
- рд╡реЗрд│ рдХреНрд╖реЗрддреНрд░
- рд▓реЛрдХреЕрд▓
- рд╕рд░реНрд╡ рдорд╛рдзреНрдпрдорд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЬрд╛рдд рдЖрд╣реЗ рдХреА рдирд╛рд╣реА рд╣реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ. рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рдкреНрд░рддрд┐рдореЗрдЪрд╛ рдЖрдХрд╛рд░ рд▓рд╣рд╛рди рдЕрд╕рддреЛ - рдореАрдбрд┐рдпрд╛рд╡рд░ рдХреЙрдкреА рдЖрдгрд┐ рд░реЗрдХреЙрд░реНрдбрд┐рдВрдЧ рд╕реБрд▓рднрддреЗрд╕рд╛рдареА. рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрд╡рд░, рддреЗ рдЕрдЬреВрдирд╣реА рди рд╡рд╛рдкрд░рд▓реЗрд▓реА рдЬрд╛рдЧрд╛ рдЖрд╣реЗ рдХрд╛ рддреЗ рддрдкрд╛рд╕рддреЗ. рддреЗрдереЗ рдЕрд╕рд▓реНрдпрд╛рд╕, рдбрд┐рд╕реНрдХрдЪреЗ рдкреБрдирд░реНрд╡рд┐рднрд╛рдЬрди рдХреЗрд▓реЗ рдЬрд╛рддреЗ.
- MAC рдкрддреНрддреНрдпрд╛рд╡рд░реВрди рдорд╢реАрди-рдЖрдпрдбреА рддрдпрд╛рд░ рдХрд░рдд рдЖрд╣реЗ. DHCP рджреНрд╡рд╛рд░реЗ рд╕рдорд╛рди рдкрддреНрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рдорд╣рддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ
- рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ
- рд▓реЙрдЧрдЪрд╛ рдЖрдХрд╛рд░ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░рддреЛ
- рдмрд╛рд╣реНрдп рдбреНрд░рд╛рдЗрд╡реНрд╣ рдХрд╛рдорд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рдд рдЖрд╣реЗ (рд╕рдВрдмрдВрдзрд┐рдд рдкрд░реНрдпрд╛рдп рд╕рдХреНрд╖рдо рдЕрд╕рд▓реНрдпрд╛рд╕ рдЖрдгрд┐ рдбреНрд░рд╛рдЗрд╡реНрд╣ рдирд╡реАрди рдЕрд╕рд▓реНрдпрд╛рд╕)
- рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕реНрдХ рд╕реБрд░реВ рдХрд░рд╛
- рдкреБрдирд░реНрд╕рдВрдЪрдпрд┐рдд рд╕реЗрд╡рд╛ рд╕реБрд░реВ рд╣реЛрддреЗ. zabbix рд╕реНрд╡рддрдГ рдЖрдгрд┐ рддреНрдпрд╛рдЪрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:
- рдЖрдзреАрдЪ zabbix рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрд╣реЗ рдХрд╛ рддреЗ рддрдкрд╛рд╕рддреЗ. рдирд╕рд▓реНрдпрд╛рд╕, рддреЗ рдЗрдирд┐рд╢рд┐рдПрд▓рд╛рдпрдЭреЗрд╢рди рдбрдВрдкрдордзреВрди рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рддреЗ (рдЭреЕрдмрд┐рдХреНрд╕рд╕рд╣)
- рдЯрд╛рдЗрдо рдЭреЛрдирдЪреА рд╕реВрдЪреА рддрдпрд╛рд░ рдХреЗрд▓реА рдЖрд╣реЗ (рддреЗ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕рдордзреНрдпреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ)
- рд╡рд░реНрддрдорд╛рди IP рд╕рд╛рдкрдбрд▓рд╛ рдЖрд╣реЗ, рддреЛ рд╕рдорд╕реНрдпреЗрдордзреНрдпреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ (рдХрдиреНрд╕реЛрд▓рдордзреНрдпреЗ рд▓реЙрдЧ рдЗрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдордВрддреНрд░рдг)
- рдЖрдордВрддреНрд░рдг рдмрджрд▓рддреЗ - рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕ рддрдпрд╛рд░ рд╣рд╛ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рджрд┐рд╕реВрди рдпреЗрддреЛ
- рдлрд░реНрдорд╡реЗрдЕрд░ рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдЖрд╣реЗ
рд╕реЗрд╡рд╛ рдлрд╛рдпрд▓реА рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдЖрд╣реЗрдд, рддреНрдпрд╛ рддреНрдпрд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдкреНрд░рдХреНрд╖реЗрдкрдгрд╛рдЪрд╛ рдХреНрд░рдо рд╕реЗрдЯ рдХрд░рддрд╛рдд
[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
рд╣реЗ рдпреЗрдереЗ рдереЛрдбреЗ рдЕрдзрд┐рдХ рдХреНрд▓рд┐рд╖реНрдЯ рдЖрд╣реЗ. рд▓реЙрдиреНрдЪ рдорд▓реНрдЯреА-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
рдпреЗрдереЗ рдХрд╛рдп рдЖрд╣реЗ:
- рдЯрд╛рдЗрдорд░ рд╡рд░реНрдгрди
- рдкреНрд░рдердо рдкреНрд░рд╛рд░рдВрдн рд╡реЗрд│, рдкреНрд░рдгрд╛рд▓реА рдмреВрдЯ рдкрд╛рд╕реВрди рд╕реБрд░реВ
- рдкреБрдвреАрд▓ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХрд╛рд▓рд╛рд╡рдзреА
- рдЯрд╛рдЗрдорд░ рд╕реЗрд╡реЗрд╡рд░ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡. рдЦрд░рдВ рддрд░, рд╣реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрд╣реЗ рдЬреА рдЯрд╛рдЗрдорд░ рдмрдирд╡рддреЗ
рдмрдВрдж рдХрд░рддрд╛рдирд╛ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдгрд┐ рдЖрдкрд▓реЗ рд╢рдЯрдбрд╛рдЙрди рд▓рдХреНрд╖реНрдп
рджреБрд╕рд░реНтАНрдпрд╛ рд╡рд┐рдХрд╛рд╕рд╛рдордзреНрдпреЗ, рдорд▓рд╛ рдорд╢реАрди рдмрдВрдж рдХрд░рдгреНрдпрд╛рдЪреА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЖрд╡реГрддреНрддреА рдХрд░рд╛рд╡реА рд▓рд╛рдЧрд▓реА - рдорд╛рдЭреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рд▓рдХреНрд╖реНрдпрд╛рджреНрд╡рд╛рд░реЗ, рдЕрдиреЗрдХ рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. рд╕рд╛рдорд╛рдиреНрдпрддрдГ 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/рд░реАрдмреВрдЯ рдЖрдгрд┐ /tmp/рд╢рдЯрдбрд╛рдЙрди рдлрд╛рдЗрд▓реНрд╕ рд╡рд╛рдкрд░рдгреЗ. рдЖрдкрдг рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╕рд╣ рд▓рдХреНрд╖реНрдп рдХреЙрд▓ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА. рдлрдХреНрдд рд╕реЗрд╡рд╛ рд╢рдХреНрдп рдЖрд╣реЗ.
рдкрд░рдВрддреБ рдореА рдХрд╛рдорд╛рдд рд▓рд╡рдЪрд┐рдХрддрд╛ рдЖрдгрд┐ рдХреГрддреАрдВрдЪрд╛ рд╣рдореА рдХреНрд░рдо рдорд┐рд│рд╡рдгреНрдпрд╛рд╕рд╛рдареА рд▓рдХреНрд╖реНрдп рд╡рд╛рдкрд░рддреЛ.
рддрдерд╛рдкрд┐, рд╕рд░реНрд╡рд╛рдд рдордиреЛрд░рдВрдЬрдХ рдЧреЛрд╖реНрдЯ рдирдВрддрд░ рдЖрд▓реА. рдорд╢реАрди рдмрдВрдж/рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЖрдгрд┐ 2 рдкрд░реНрдпрд╛рдп рдЖрд╣реЗрдд:
- рд░реАрдмреВрдЯ, рд╢рдЯрдбрд╛рдЙрди рдЖрдгрд┐ рдЗрддрд░ рдХрдорд╛рдВрдбреНрд╕ (рддреЗ рдЕрдЬреВрдирд╣реА systemctl рд▓рд╛ рд╕рд┐рдорд▓рд┐рдВрдХ рдЖрд╣реЗрдд) рддреБрдордЪреНрдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╕рд╣ рдмрджрд▓рд╛. рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪреНрдпрд╛ рдЖрдд, my_shutdown.target рд╡рд░ рдЬрд╛. рдЖрдгрд┐ рд▓рдХреНрд╖реНрдпрд╛рдордзреАрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдирдВрддрд░ рдереЗрдЯ systemctl рд╡рд░ рдХреЙрд▓ рдХрд░рддрд╛рдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, systemctl рд░реАрдмреВрдЯ
- рдПрдХ рд╕реЛрдкрд╛ рдкрд░реНрдпрд╛рдп, рдкрдг рдорд▓рд╛ рддреЛ рдЖрд╡рдбрдд рдирд╛рд╣реА. рд╕рд░реНрд╡ рдЗрдВрдЯрд░рдлреЗрд╕рдордзреНрдпреЗ, рд╢рдЯрдбрд╛рдЙрди/рд░реАрдмреВрдЯ/рдЗрддрд░ рдХреЙрд▓ рдХрд░реВ рдирдХрд╛, рдкрд░рдВрддреБ рд▓рдХреНрд╖реНрдпрд┐рдд systemctl isolate my_shutdown.target рд▓рд╛ рдереЗрдЯ рдХреЙрд▓ рдХрд░рд╛
рдореА рдкрд╣рд┐рд▓рд╛ рдкрд░реНрдпрд╛рдп рдирд┐рд╡рдбрд▓рд╛. systemd рдордзреНрдпреЗ, рд░реАрдмреВрдЯ (рдкреЙрд╡рд░рдСрдл рд╕рд╛рд░рдЦреЗ) рд╣реЗ 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