рд╕рд┐рд╕реНрдЯрдордбреА, рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЯрд╛рдЗрдорд░

рд╕рд┐рд╕реНрдЯрдордбреА, рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЯрд╛рдЗрдорд░

рдкрд░рд┐рдЪрдп

рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдЪрд╛рд▓реВ рдпрд╛ рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИрдВред рд╕рд┐рд╕реНрдЯрдо V рдореЗрдВ рдпрд╣ рдЖрд╕рд╛рди рдерд╛, рд▓реЗрдХрд┐рди рд╕рд┐рд╕реНрдЯрдордбреА рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдорд╛рдпреЛрдЬрди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрдкрдиреЗ рдЯрд╛рдЗрдорд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдореЗрдВ рд▓рдХреНрд╖реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?

рдпрд╣ рдЕрдХреНрд╕рд░ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд▓рдХреНрд╖реНрдп рд╕рд┐рд╕реНрдЯрдо 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

рдпрд╣ рд▓рдХреНрд╖реНрдп рддрдм рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдЧрд╛ рдЬрдм рдорд▓реНрдЯреА-рдпреВрдЬрд░.рдЯрд╛рд░рдЧреЗрдЯ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓рд░.рд╕рд░реНрд╡рд┐рд╕ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕реА рдХрдИ рд╕реЗрд╡рд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

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

рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рд╣реИ рдлрд╛рдЗрдирд▓.рдЯрд╛рд░реНрдЧреЗрдЯ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ - рд╡рд╣ рд▓рдХреНрд╖реНрдп рдЬрд┐рд╕ рдкрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдкрд╣реБрдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рд╕рд┐рд╕реНрдЯрдордбреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рд╕реЗ рдЧреБрдЬрд░реЗрдЧрд╛ рдФрд░ рдЕрдкрдиреА рдЬрд░реВрд░рдд рдХреА рд╕рднреА рдЪреАрдЬреЗрдВ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ред
рдлрд╛рдЗрдирд▓.рдЯрд╛рд░рдЧреЗрдЯ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓реЛрдбрд░ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рдЕрдВрддрд┐рдо рд▓реЙрдиреНрдЪ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

  1. рдмреВрдЯрд▓реЛрдбрд░ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрддрд╛ рд╣реИ
  2. рдмреВрдЯрд▓реЛрдбрд░ рдлрд╛рдЗрдирд▓.рдЯрд╛рд░рдЧреЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдХреЗ рдлрд░реНрдорд╡реЗрдпрд░ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ
  3. Systemd рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ. рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЙрдирдХреА рдирд┐рд░реНрднрд░рддрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд▓реНрдЯреА-рдпреВрдЬрд░.рдЯрд╛рд░реНрдЧреЗрдЯ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ basic.target рд╕реЗ installer.target рдпрд╛ Work.target рдкрд░ рдЬрд╛рддрд╛ рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рддрд╛ рд╣реИ

рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рдлрд░реНрдорд╡реЗрдпрд░ рддреИрдпрд╛рд░ рдХрд░рдирд╛

рдлрд╝рд░реНрдорд╡реЗрдпрд░ рдмрдирд╛рддреЗ рд╕рдордп, рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рд╕рд┐рд╕реНрдЯрдо рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рд╕рд╣реЗрдЬрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╣рдореЗрд╢рд╛ рдЙрдарддрд╛ рд╣реИред рд░рд╛рдЬреНрдп рдХрд╛ рдЕрд░реНрде рд╣реИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЗрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдбрдВрдк, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЗрддреНрдпрд╛рджрд┐ред

Systemd рд╕рдорд╛рди рд▓рдХреНрд╖реНрдп рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдЪрд▓рд╛рддрд╛ рд╣реИред рдРрд╕реА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдЕрдиреБрдХреНрд░рдо рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред

рдпрд╣ рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ( https://habr.com/ru/post/477008/ https://github.com/skif-web/monitor)

  1. рд╕рд┐рд╕реНрдЯрдо рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ
  2. рд╕реЗрдЯрд┐рдВрдЧреНрд╕_рд░рд┐рд╕реНрдЯреЛрд░.рд╕рд░реНрд╡рд┐рд╕ рд╕реЗрд╡рд╛ рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рд╣реИред рдпрд╣ рдбреЗрдЯрд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕.txt рдлрд╝рд╛рдЗрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдПрдХ рд╕рдВрджрд░реНрдн рдлрд╝рд╛рдЗрд▓ рд░рдЦреА рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ:
    • рдкрд╛рд╕рд╡рд░реНрдб рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ
    • рд╣реЛрд╕реНрдЯрдирд╛рдо,
    • рд╕рдордп рдХреНрд╖реЗрддреНрд░
    • рд╕реНрдерд╛рди
    • рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рднреА рдореАрдбрд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ рдЫреЛрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ - рдореАрдбрд┐рдпрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдПред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, рдпрд╣ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрднреА рднреА рдЕрдкреНрд░рдпреБрдХреНрдд рд╕реНрдерд╛рди рд╣реИред рдпрджрд┐ рд╣реИ, рддреЛ рдбрд┐рд╕реНрдХ рдкреБрдирдГ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИред
    • рдореИрдХ рдкрддреЗ рд╕реЗ рдорд╢реАрди-рдЖрдИрдбреА рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ред рдбреАрдПрдЪрд╕реАрдкреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд╛рди рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ
    • рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗрдЯрд┐рдВрдЧ
    • рд▓реЙрдЧ рдХрд╛ рдЖрдХрд╛рд░ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ
    • рдмрд╛рд╣рд░реА рдбреНрд░рд╛рдЗрд╡ рдХреЛ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдпрджрд┐ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдХрд▓реНрдк рд╕рдХреНрд╖рдо рд╣реИ рдФрд░ рдбреНрд░рд╛рдЗрд╡ рдирдИ рд╣реИ)
  3. рдкреЛрд╕реНрдЯрдЧреНрд░реИрд╕реНрдХ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ
  4. рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рд╕реЗрд╡рд╛ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрддреА рд╣реИ. рдЬрд╝реИрдмрд┐рдХреНрд╕ рдФрд░ рдЙрд╕рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
    • рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╝реИрдмрд┐рдХреНрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдореМрдЬреВрдж рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЗрд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдбрдВрдк (рдЬрд╝реИрдмрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓) рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ
    • рд╕рдордп рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдИ рдЧрдИ рд╣реИ (рдЙрдиреНрд╣реЗрдВ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)
    • рд╡рд░реНрддрдорд╛рди рдЖрдИрдкреА рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рдЗрд╕реЗ рдЕрдВрдХ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдХрдВрд╕реЛрд▓ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдордВрддреНрд░рдг)
  5. рдирд┐рдордВрддреНрд░рдг рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ - рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ
  6. рдлрд╝рд░реНрдорд╡реЗрдпрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ

рд╕реЗрд╡рд╛ рдлрд╝рд╛рдЗрд▓реЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рд╡реЗ рд╣реА рдЙрдирдХреЗ рд▓реЙрдиреНрдЪ рдХрд╛ рдХреНрд░рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИрдВ

[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 рд╢реБрд░реВ рд╣реЛред

рдФрд░ рджреВрд╕рд░реА рд╕реЗрд╡рд╛ (рдЬрд╝реИрдмрд┐рдХреНрд╕ рддреИрдпрд╛рд░реА)

#!/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

рдпрд╣рд╛рдВ рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рд▓реЙрдиреНрдЪ рдорд▓реНрдЯреА-рдпреВрдЬрд░.рдЯрд╛рд░рдЧреЗрдЯ рдореЗрдВ рднреА рд╣реИ, рд▓реЗрдХрд┐рди рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕реНрдХреНрд▓ рдбреАрдмреАрдПрдордПрд╕ рдФрд░ рдореЗрд░реА рд╕реЗрдЯрд┐рдВрдЧ_рд░реЗрд╕реНрдЯреЛрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рджред рд▓реЗрдХрд┐рди рдЬрд╝реИрдмрд┐рдХреНрд╕ рд╕реЗрд╡рд╛рдПрдБ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред

рд▓реЙрдЧрд░реЛрдЯреЗрдЯ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдорд░ рд╕реЗрд╡рд╛

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 рдмрдирд╛рдпрд╛, рдЬреЛ рдХрд┐рд╕реА рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдерд╛:
рдореЗрд░рд╛_рд╢рдЯрдбрд╛рдЙрди.рд▓рдХреНрд╖реНрдп

[Unit]
Description=my shutdown
AllowIsolate=yes
Wants=my_shutdown.service 

рдЗрд╕ рд▓рдХреНрд╖реНрдп рдкрд░ рдЬрд╛рдиреЗ рдкрд░ (systemctl isolat 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 рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд▓рдХреНрд╖реНрдп рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╕реЗрд╡рд╛ рд╣реА рд╕рдВрднрд╡ рд╣реИ.

рд▓реЗрдХрд┐рди рдореИрдВ рдХрд╛рдо рдореЗрдВ рд▓рдЪреАрд▓реЗрдкрди рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЧрд╛рд░рдВрдЯреАрдХреГрдд рдХреНрд░рдо рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдмрд╛рдж рдореЗрдВ рдЖрдИред рдорд╢реАрди рдХреЛ рдмрдВрдж/рдкреБрдирдГ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ 2 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  • рд░рд┐рдмреВрдЯ, рд╢рдЯрдбрд╛рдЙрди рдФрд░ рдЕрдиреНрдп рдХрдорд╛рдВрдб (рд╡реЗ рдЕрднреА рднреА systemctl рдХреЗ рд▓рд┐рдП рд╕рд┐рдореНрд▓рд┐рдВрдХ рд╣реИрдВ) рдХреЛ рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдмрджрд▓реЗрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрджрд░, my_shutdown.target рдкрд░ рдЬрд╛рдПрдВред рдФрд░ рд▓рдХреНрд╖реНрдп рдХреЗ рдЕрдВрджрд░ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реАрдзреЗ systemctl рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, systemctl рд░рд┐рдмреВрдЯ
  • рдПрдХ рдЖрд╕рд╛рди рд╡рд┐рдХрд▓реНрдк, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ. рд╕рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ, рд╢рдЯрдбрд╛рдЙрди/рд░рд┐рдмреВрдЯ/рдЕрдиреНрдп рдХреЛ рдХреЙрд▓ рди рдХрд░реЗрдВ, рдмрд▓реНрдХрд┐ рд╕реАрдзреЗ рд▓рдХреНрд╖реНрдп systemctl рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдЕрд▓рдЧ рдХрд░реЗрдВ my_shutdown.target

рдореИрдВрдиреЗ рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛. рд╕рд┐рд╕реНрдЯрдордбреА рдореЗрдВ, рд░реАрдмреВрдЯ (рдкреЙрд╡рд░рдСрдлрд╝ рдХреА рддрд░рд╣) рд╕рд┐рд╕реНрдЯрдордбреА рдХреЗ рдкреНрд░рддрд┐ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд╣реИред

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ