เชธเชฟเชธเซเชŸเชฎเซเชก, เช‡เชจเซเชŸเชฐเซ‡เช•เซเชŸเชฟเชต เชธเซเช•เซเชฐเชฟเชชเซเชŸเซเชธ เช…เชจเซ‡ เชŸเชพเชˆเชฎเชฐ

เชธเชฟเชธเซเชŸเชฎเซเชก, เช‡เชจเซเชŸเชฐเซ‡เช•เซเชŸเชฟเชต เชธเซเช•เซเชฐเชฟเชชเซเชŸเซเชธ เช…เชจเซ‡ เชŸเชพเชˆเชฎเชฐ

เชชเชฐเชฟเชšเชฏ

เชœเซเชฏเชพเชฐเซ‡ Linux เชฎเชพเชŸเซ‡ เชกเซ‡เชตเชฒเชช เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เชนเซ‹เชฏ, เชคเซเชฏเชพเชฐเซ‡ เช‡เชจเซเชŸเชฐเซ‡เช•เซเชŸเชฟเชต เชธเซเช•เซเชฐเชฟเชชเซเชŸเซเชธ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เช•เชพเชฐเซเชฏ เช•เซ‡ เชœเซ‡ เชธเชฟเชธเซเชŸเชฎ เชšเชพเชฒเซ เช…เชฅเชตเชพ เชฌเช‚เชง เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เชฅเชพเชฏ เช›เซ‡. เชธเชฟเชธเซเชŸเชฎ 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

เชธเซŒเชฅเซ€ เชฎเชนเชคเซเชตเชจเซ€ เชฌเชพเชฌเชค เช เช›เซ‡ เช•เซ‡ เชซเชพเช‡เชจเชฒ.เชŸเชพเชฐเซเช—เซ‡เชŸ เชชเชธเช‚เชฆ เช•เชฐเชตเซเช‚ - เชฒเช•เซเชทเซเชฏ เช•เซ‡ เชœเซ‡เชจเชพ เชชเชฐ เชธเชฟเชธเซเชŸเชฎ เชธเซเชŸเชพเชฐเซเชŸเช…เชช เชชเชฐ เชชเชนเซ‹เช‚เชšเชตเซ€ เชœเซ‹เชˆเช. เชธเซเชŸเชพเชฐเซเชŸเช…เชช เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฆเชฐเชฎเชฟเชฏเชพเชจ, 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 เชเชกเซเชฐเซ‡เชธ เชชเชฐเชฅเซ€ เชฎเชถเซ€เชจ-id เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡. DHCP เชฆเซเชตเชพเชฐเชพ เชธเชฎเชพเชจ เชธเชฐเชจเชพเชฎเซเช‚ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡ เช† เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡
    • เชจเซ‡เชŸเชตเชฐเซเช• เชธเซ‡เชŸเชฟเช‚เช—เซเชธ
    • เชฒเซ‰เช—เชจเชพ เช•เชฆเชจเซ‡ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เช•เชฐเซ‡ เช›เซ‡
    • เชฌเชพเชนเซเชฏ เชกเซเชฐเชพเชˆเชต เช•เชพเชฎ เชฎเชพเชŸเซ‡ เชคเซˆเชฏเชพเชฐ เชฅเชˆ เชฐเชนเซ€ เช›เซ‡ (เชœเซ‹ เช…เชจเซเชฐเซ‚เชช เชตเชฟเช•เชฒเซเชช เชธเช•เซเชทเชฎ เชนเซ‹เชฏ เช…เชจเซ‡ เชกเซเชฐเชพเชˆเชต เชจเชตเซ€ เชนเซ‹เชฏ)
  3. เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชธเซเช• เชถเชฐเซ‚ เช•เชฐเซ‹
  4. เชชเซเชจเชƒเชธเซเชฅเชพเชชเชจ เชธเซ‡เชตเชพ เชถเชฐเซ‚ เชฅเชพเชฏ เช›เซ‡. เชเชฌเซเชฌเซ€เช•เซเชธ เชชเซ‹เชคเซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เชกเซ‡เชŸเชพเชฌเซ‡เช เชคเซˆเชฏเชพเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเซ‡ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡:
    • เชเชฌเซเชฌเซ€เช•เซเชธ เชกเซ‡เชŸเชพเชฌเซ‡เช เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎ เชคเซ‡ เชคเชชเชพเชธเซ‡ เช›เซ‡. เชœเซ‹ เชจเชนเชฟเช‚, เชคเซ‹ เชคเซ‡ เชถเชฐเซ‚เช†เชคเชจเชพ เชกเชฎเซเชชเซเชธเชฎเชพเช‚เชฅเซ€ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (เชเซ‡เชฌเชฟเช•เซเชธ เชธเชพเชฅเซ‡ เชธเชฎเชพเชตเชฟเชทเซเชŸ)
    • เชธเชฎเชฏ เชเซ‹เชจเชจเซ€ เชธเซ‚เชšเชฟ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡ (เชคเซ‡เชฎเชจเซ‡ เชตเซ‡เชฌ เช‡เชจเซเชŸเชฐเชซเซ‡เชธเชฎเชพเช‚ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡)
    • เชตเชฐเซเชคเชฎเชพเชจ IP เชฎเชณเซเชฏเซ‹ เช›เซ‡, เชคเซ‡ เช…เช‚เช•เชฎเชพเช‚ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชฅเชพเชฏ เช›เซ‡ (เช•เชจเซเชธเซ‹เชฒเชฎเชพเช‚ เชฒเซ‰เช— เช‡เชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซเช‚ เช†เชฎเช‚เชคเซเชฐเชฃ)
  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 เช…เชจเซ‡ my 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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹