เจธเจฟเจธเจŸเจฎเจก, เจ‡เฉฐเจŸเจฐเจเจ•เจŸเจฟเจต เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจ…เจคเฉ‡ เจŸเจพเจˆเจฎเจฐ

เจธเจฟเจธเจŸเจฎเจก, เจ‡เฉฐเจŸเจฐเจเจ•เจŸเจฟเจต เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจ…เจคเฉ‡ เจŸเจพเจˆเจฎเจฐ

เจœเจพเจฃ เจชเจ›เจพเจฃ

เจฒเฉ€เจจเจ•เจธ เจฒเจˆ เจตเจฟเจ•เจธเจค เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡, เจ‡เฉฐเจŸเจฐเจเจ•เจŸเจฟเจต เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจฌเจฃเจพเจ‰เจฃ เจฆเจพ เจ•เฉฐเจฎ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจธเจฟเจธเจŸเจฎ เจฆเฉ‡ เจšเจพเจฒเฉ‚ เจœเจพเจ‚ เจฌเฉฐเจฆ เจนเฉ‹เจฃ 'เจคเฉ‡ เจšเจฒเจพเจ‡เจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจธเจฟเจธเจŸเจฎ 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 เจเจกเจฐเฉˆเฉฑเจธ เจคเฉ‹เจ‚ เจฎเจธเจผเฉ€เจจ-id เจฌเจฃเจพเจ‰เจฃเจพเฅค เจ‡เจน DHCP เจฐเจพเจนเฉ€เจ‚ เจ‡เฉฑเจ•เฉ‹ เจชเจคเฉ‡ เจจเฉ‚เฉฐ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆ
    • เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚
    • เจฒเจพเจ—เจพเจ‚ เจฆเฉ‡ เจ†เจ•เจพเจฐ เจจเฉ‚เฉฐ เจธเฉ€เจฎเจค เจ•เจฐเจฆเจพ เจนเฉˆ
    • เจฌเจพเจนเจฐเฉ€ เจกเจฐเจพเจˆเจต เจ•เฉฐเจฎ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ€ เจœเจพ เจฐเจนเฉ€ เจนเฉˆ (เจœเฉ‡เจ•เจฐ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจตเจฟเจ•เจฒเจช เจฏเฉ‹เจ— เจนเฉˆ เจ…เจคเฉ‡ เจกเจฐเจพเจˆเจต เจจเจตเฉ€เจ‚ เจนเฉˆ)
  3. postgresq เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ‹
  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 เจธเจผเฉเจฐเฉ‚ เจนเฉ‹เจตเฉ‡เจ—เจพ.

เจ…เจคเฉ‡ เจฆเฉ‚เจœเฉ€ เจธเฉ‡เจตเจพ (เจœเจผเฉˆเจฌเจฟเจ•เจธ เจฆเฉ€ เจคเจฟเจ†เจฐเฉ€)

#!/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 เจ…เจคเฉ‡ เจฎเฉ‡เจฐเฉ€ เจธเฉˆเจŸเจฟเฉฐเจ—_เจฐเฉ€เจธเจŸเฉ‹เจฐ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆเฅค เจชเจฐ 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 เจฐเฉ€เจฌเฉ‚เจŸ
  • เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจตเจฟเจ•เจฒเจช, เจชเจฐ เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เจน เจชเจธเฉฐเจฆ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจธเจพเจฐเฉ‡ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธเจพเจ‚ เจตเจฟเฉฑเจš, shutdown/reboot/other เจจเฉ‚เฉฐ เจ•เจพเจฒ เจจเจพ เจ•เจฐเฉ‹, เจชเจฐ เจŸเจพเจฐเจ—เฉ‡เจŸ systemctl isolate 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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹