Systemd, рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░ рдЯрд╛рдЗрдорд░

Systemd, рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░ рдЯрд╛рдЗрдорд░

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

рд▓рд┐рдирдХреНрд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрджрд╛, рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдп рдЬреБрди рдкреНрд░рдгрд╛рд▓реА рдЦреЛрд▓реНрджрд╛ рд╡рд╛ рдмрдиреНрдж рд╣реБрдБрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреНрдЫред рдкреНрд░рдгрд╛рд▓реА 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 рдЪрдпрди рдЧрд░реНрдиреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреН, рдореИрд▓реЗ рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рд▓реЛрдбрд░ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдВред

рдЕрдиреНрддрд┐рдо рдкреНрд░рдХреНрд╖реЗрдкрдг рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:

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

рдкреНрд░рдХреНрд╖реЗрдкрдгрдХреЛ рд▓рд╛рдЧрд┐ рдлрд░реНрдорд╡реЗрдпрд░ рддрдпрд╛рд░реА рдЧрд░реНрджреИ

рдлрд░реНрдорд╡реЗрдпрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛, рдХрд╛рд░реНрдп рд╕рдБрдзреИ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрдорд╛ рдкреНрд░рдгрд╛рд▓реА рд╕реНрдерд┐рддрд┐ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдЧрд░реНрдиреЗ рд░ рдмрдиреНрдж рдЧрд░реНрджрд╛ рдпрд╕рд▓рд╛рдИ рдмрдЪрдд рдЧрд░реНрдиреЗ рд╣реБрдиреНрдЫред рд░рд╛рдЬреНрдп рднрдиреЗрдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рд╣рд░реВ, рдбрд╛рдЯрд╛рдмреЗрд╕ рдбрдореНрдкрд╣рд░реВ, рдЗрдиреНрдЯрд░рдлреЗрд╕ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ, рдЖрджрд┐ рд╣реЛред

Systemd рд╕рдорд╛рдирд╛рдиреНрддрд░рдорд╛ рд╕рдорд╛рди рд▓рдХреНрд╖реНрдпрдорд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдЪрд▓рд╛рдЙрдБрдЫред рддреНрдпрд╣рд╛рдБ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВ рдЫрдиреН рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрдХреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдЕрдиреБрдХреНрд░рдо рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред

рдпрд╕рд▓реЗ рдореЗрд░реЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ ( https://habr.com/ru/post/477008/ https://github.com/skif-web/monitor)

  1. рдкреНрд░рдгрд╛рд▓реА рд╕реБрд░реБ рд╣реБрдиреНрдЫ
  2. Settings_restore.service рд╕реЗрд╡рд╛ рд╕реБрд░реБ рднрдПрдХреЛ рдЫред рдпрд╕рд▓реЗ рдбреЗрдЯрд╛ рдЦрдгреНрдбрдорд╛ settings.txt рдлрд╛рдЗрд▓рдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐ рдЬрд╛рдБрдЪ рдЧрд░реНрдЫред рдпрджрд┐ рдпреЛ рддреНрдпрд╣рд╛рдБ рдЫреИрди рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рдПрдЙрдЯрд╛ рд╕рдиреНрджрд░реНрдн рдлрд╛рдЗрд▓ рдпрд╕рдХреЛ рд╕реНрдерд╛рдирдорд╛ рд░рд╛рдЦрд┐рдПрдХреЛ рдЫред рдЕрд░реНрдХреЛ, рдкреНрд░рдгрд╛рд▓реА рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдЫрдиреН:
    • рдкреНрд░рд╢рд╛рд╕рдХ рдкрд╛рд╕рд╡рд░реНрдб
    • рд╣реЛрд╕реНрдЯрдирд╛рдо,
    • рд╕рдордп рдХреНрд╖реЗрддреНрд░
    • рд▓реЛрдХреЗрд▓
    • рд╕рдмреИ рдорд┐рдбрд┐рдпрд╛ рдкреНрд░рдпреЛрдЧ рднрдЗрд░рд╣реЗрдХреЛ рдЫ рдХрд┐ рдЫреИрди рднрдиреЗрд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрджрдЫред рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рдЫрд╡рд┐ рдЖрдХрд╛рд░ рд╕рд╛рдиреЛ рдЫ - рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрди рд░ рдорд┐рдбрд┐рдпрд╛рдорд╛ рд░реЗрдХрд░реНрдбрд┐рдЩ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛрдХреЛ рд▓рд╛рдЧрд┐ред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрдорд╛, рдпрд╕рд▓реЗ рдЕрдЭреИ рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдирдЧрд░рд┐рдПрдХреЛ рдард╛рдЙрдБ рдЫ рдХрд┐ рдЫреИрди рднрдиреЗрд░ рдЬрд╛рдБрдЪ рдЧрд░реНрдЫред рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдЫ рднрдиреЗ, рдбрд┐рд╕реНрдХ рдкреБрди: рд╡рд┐рднрд╛рдЬрди рдЧрд░рд┐рдПрдХреЛ рдЫред
    • MAC рдареЗрдЧрд╛рдирд╛рдмрд╛рдЯ рдореЗрд╕рд┐рди-рдЖрдИрдбреА рдЙрддреНрдкрдиреНрди рдЧрд░реНрджреИред DHCP рдорд╛рд░реНрдлрдд рдЙрд╣реА рдареЗрдЧрд╛рдирд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдпреЛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ
    • рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ
    • рд▓рдЧрд╣рд░реВрдХреЛ рдЖрдХрд╛рд░ рд╕реАрдорд┐рдд рдЧрд░реНрджрдЫ
    • рдмрд╛рд╣реНрдп рдбреНрд░рд╛рдЗрдн рдХрд╛рдордХреЛ рд▓рд╛рдЧрд┐ рддрдпрд╛рд░ рднрдЗрд░рд╣реЗрдХреЛ рдЫ (рдпрджрд┐ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╡рд┐рдХрд▓реНрдк рд╕рдХреНрд╖рдо рдЫ рд░ рдбреНрд░рд╛рдЗрдн рдирдпрд╛рдБ рдЫ)
  3. postgresq рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН
  4. рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рд╕реЗрд╡рд╛ рд╕реБрд░реБ рд╣реБрдиреНрдЫред рдпреЛ zabbix рдЖрдлреИ рд░ рдпрд╕рдХреЛ рдбрд╛рдЯрд╛рдмреЗрд╕ рддрдпрд╛рд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:
    • рдкрд╣рд┐рд▓реЗ рдиреИ zabbix рдбрд╛рдЯрд╛рдмреЗрд╕ рдЫ рдХрд┐ рдЫреИрди рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫред рдпрджрд┐ рд╣реЛрдЗрди рднрдиреЗ, рдпреЛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдбрдореНрдкрдмрд╛рдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ (zabbix рд╕рд╣рд┐рдд)
    • рд╕рдордп рдХреНрд╖реЗрддреНрд░рд╣рд░реВрдХреЛ рд╕реВрдЪреА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ (рд╡реЗрдм тАЛтАЛрдЗрдиреНрдЯрд░рдлреЗрд╕рдорд╛ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ)
    • рд╣рд╛рд▓рдХреЛ рдЖрдИрдкреА рдлреЗрд▓рд╛ рдкрд░реНрдпреЛ, рдпреЛ рдореБрджреНрджрд╛рдорд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реБрдиреНрдЫ (рдХрдиреНрд╕реЛрд▓рдорд╛ рд▓рдЧ рдЗрди рдЧрд░реНрди рдирд┐рдордиреНрддреНрд░рдгрд╛)
  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 рд╕реБрд░реБ рд╣реБрдиреЗрдЫред

рд░ рджреЛрд╕реНрд░реЛ рд╕реЗрд╡рд╛ (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 рд▓рд╛рдИ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрди рд╕рдХреНрдЫред рдЧрдореНрднреАрд░рддрд╛рдкреВрд░реНрд╡рдХред рдпрд╕рдмрд╛рд╣реЗрдХ, рд╕рдЯреАрдХрддрд╛ рдорд┐рдиреЗрдЯ рд╕рдореНрдо рд╣реЛрдЗрди, рддрд░ рд╕реЗрдХреЗрдиреНрдб рд╕рдореНрдо рд╣реЛ (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреЗ рдХреЗ рд╣реЛ)ред рд╡рд╛ рддрдкрд╛рдЗрдБ рдПрдХ рдиреАрд░рд╕ рдЯрд╛рдЗрдорд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдШрдЯрдирд╛рдмрд╛рдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ рджреНрд╡рд╛рд░рд╛ рдмреЛрд▓рд╛рдЗрдПрдХреЛред
рдпреЛ рдиреАрд░рд╕ рдЯрд╛рдЗрдорд░ рдерд┐рдпреЛ рдЬреБрди рдореИрд▓реЗ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдХреЛ рдореЗрд╕рд┐рдирдХреЛ рд╕реБрд░реБрдмрд╛рдЯ рд╕рдордп рдЧрдгрдирд╛ рдЧрд░реНрджрдЫред
рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ реи рдлрд╛рдЗрд▓рд╣рд░реВ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдиреЗрдЫ
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 рдЖрджреЗрд╢ рдЯрд╛рдБрд╕реНрдиреБрд╣реЛрд╕реН рд░ рдпрд╕рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдмрдЪрдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рддреНрдпрд╕реИрд▓реЗ рдореИрд▓реЗ рдореЗрд░реЛ рд▓рдХреНрд╖реНрдпрдмрд╛рдЯ рдмрдиреНрджрд▓рд╛рдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реЗрдВред рдо резрежреж% рд╕рд╣реА рднрдПрдХреЛ рджрд╛рдмреА рдЧрд░реНрджрд┐рди, рддрд░ рдпрд╕рд▓реЗ рдХрд╛рдо рдЧрд░реНрдЫ!
рдпреЛ рдХрд╕рд░реА рдЧрд░рд┐рдпреЛ (рд╕рд╛рдорд╛рдиреНрдп рд╕рд░реНрддрд╣рд░реВрдорд╛):
рдореИрд▓реЗ рдПрдЙрдЯрд╛ рд▓рдХреНрд╖реНрдп my_shutdown.targe рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдВ, рдЬреБрди рдХрд╕реИрдорд╛ рдирд┐рд░реНрднрд░ рдерд┐рдПрди:
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 рдорд╛, рд░рд┐рдмреБрдЯ (рдЬрд╕реНрддреИ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди