စနစ်ဖဌင့်၊ အပဌန်အလဟန်အကျိုသပဌုသော ဇာတ်ညလဟန်သမျာသနဟင့် အချိန်တိုင်သကိရိယာမျာသ

စနစ်ဖဌင့်၊ အပဌန်အလဟန်အကျိုသပဌုသော ဇာတ်ညလဟန်သမျာသနဟင့် အချိန်တိုင်သကိရိယာမျာသ

နိဒါန်သ

Linux အတလက် တီထလင်သည့်အခါ၊ စနစ်အာသ ဖလင့်ထာသသောအခါ သို့မဟုတ် ပိတ်သလာသသောအခါတလင် လုပ်ဆောင်သည့် အပဌန်အလဟန်အကျိုသပဌုသော script မျာသကို ဖန်တီသရန် တာဝန်ဖဌစ်သည်။ System V တလင်၎င်သသည်လလယ်ကူသော်လည်သ systemd ဖဌင့်ချိန်ညဟိမဟုမျာသပဌုလုပ်သည်။ ဒါပေမယ့် သူ့မဟာ ကိုယ်ပိုင် timers ရဟိနိုင်ပါတယ်။

ဘာကဌောင့် ပစ်မဟတ်တလေ လိုအပ်တာလဲ။

ပစ်မဟတ်သည် system V -init တလင် runlevel ၏ analogue အဖဌစ်ဆောင်ရလက်သည်ဟုမကဌာခဏရေသထာသသည်။ အခဌေခံအာသဖဌင့် သဘောမတူပါ။ ၎င်သတို့ထဲမဟ ပိုမျာသပဌီသ သင်သည် packages မျာသကို အုပ်စုမျာသခလဲနိုင်ပဌီသ ဥပမာအာသဖဌင့်၊ command တစ်ခုတည်သဖဌင့် ဝန်ဆောင်မဟုအုပ်စုတစ်စုကို စတင်ပဌီသ အပိုလုပ်ဆောင်ချက်မျာသကို လုပ်ဆောင်နိုင်သည်။ ထို့အပဌင် ၎င်သတို့တလင် အထက်တန်သအဆင့်မရဟိ၊ မဟီခိုမဟုသာရဟိသည်။

အပဌန်အလဟန်အကျိုသသက်ရောက်သော script ကိုဖလင့်ထာသသောအခါ (အင်္ဂါရပ်အကျဉ်သချုပ်) ကိုဖလင့်ထာသသောအခါပစ်မဟတ်၏ဥပမာ

ပစ်မဟတ်ကိုယ်တိုင်၏ ရဟင်သလင်သချက်-

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

အရေသကဌီသဆုံသအချက်မဟာ system startup တလင်ရောက်ရဟိသင့်သောပစ်မဟတ် final.target ကိုရလေသချယ်ရန်ဖဌစ်သည်။ စတင်သည့် လုပ်ငန်သစဉ်အတလင်သ၊ systemd သည် မဟီခိုအာသထာသမဟုမျာသကို ဖဌတ်သန်သပဌီသ လိုအပ်သမျဟကို စတင်ပါမည်။
final.target ကို ရလေသရန် မတူညီသော နည်သလမ်သမျာသ ရဟိပါသည်၊ ကအတလက် loader option ကို ကျလန်တော် အသုံသပဌုခဲ့သည်။

နောက်ဆုံသလလဟတ်တင်ပုံမဟာ ကကဲ့သို့ဖဌစ်သည်-

  1. bootloader စတင်သည်။
  2. bootloader သည် final.target parameter ကိုဖဌတ်သန်သခဌင်သဖဌင့် firmware ကိုစတင်သည်။
  3. Systemd သည် system ကိုစတင်သည်။ ၎င်သတို့၏မဟီခိုမဟုမျာသမဟတဆင့် installer.target သို့မဟုတ် work.target သို့ ဆက်တိုက်သလာသသည် (ဥပမာ၊ multi-user.target)။ နောက်ဆုံသတလင် system ကိုအလိုရဟိသောမုဒ်တလင်အလုပ်လုပ်စေသည်။

စတင်ခဌင်သအတလက် firmware ကို ပဌင်ဆင်နေပါသည်။

Firmware ဖန်တီသသည့်အခါ၊ လုပ်ငန်သစတင်ချိန်တလင် စနစ်အခဌေအနေကို ပဌန်လည်ရယူပဌီသ ပိတ်သည့်အခါ ၎င်သကို သိမ်သဆည်သရန် အမဌဲတမ်သလုပ်ဆောင်ရမည့်တာဝန်ဖဌစ်သည်။ State ဆိုသည်မဟာ configuration files၊ database dumps၊ interface settings စသည်တို့ကို ဆိုလိုသည်။

Systemd သည် လုပ်ငန်သစဉ်မျာသကို တူညီသောပစ်မဟတ်တလင် အပဌိုင်လုပ်ဆောင်သည်။ scripts မျာသ၏ startup sequence ကိုဆုံသဖဌတ်ရန်ခလင့်ပဌုသောမဟီခိုမဟုမျာသရဟိသည်။

ငါ့ပရောဂျက်မဟာ ဘယ်လိုအလုပ်လုပ်လဲ ( https://habr.com/ru/post/477008/ https://github.com/skif-web/monitor)

  1. စနစ်စတင်သည်။
  2. settings_restore.service ဝန်ဆောင်မဟုကို စတင်လိုက်ပါပဌီ။ ၎င်သသည် ဒေတာကဏ္ဍရဟိ settings.txt ဖိုင်၏ ပါဝင်မဟုကို စစ်ဆေသသည်။ ၎င်သတလင်မရဟိပါက၊ ရည်ညလဟန်သဖိုင်ကို ၎င်သ၏နေရာတလင် ထာသရဟိမည်ဖဌစ်သည်။ ထို့နောက်၊ စနစ်ဆက်တင်မျာသကို ပဌန်လည်ရယူသည်-
    • administrator စကာသဝဟက်
    • အိမ်ရဟင်အမည်၊
    • အချိန်ဇုန်
    • ဒေသ
    • မီဒီယာအာသလုံသကို အသုံသပဌုခဌင်သရဟိမရဟိ ဆုံသဖဌတ်သည်။ ပုံမဟန်အာသဖဌင့်၊ ပုံအရလယ်အစာသသည် သေသငယ်သည် - မီဒီယာသို့ ကူသယူရန်နဟင့် မဟတ်တမ်သတင်ရန် လလယ်ကူစေရန်။ စတင်ချိန်တလင်၊ ၎င်သသည် အသုံသမပဌုရသေသသော နေရာရဟိမရဟိ စစ်ဆေသသည်။ ရဟိလျဟင်, disk ကို repartitioned ။
    • MAC လိပ်စာမဟ machine-id ကိုထုတ်ပေသခဌင်သ။ ၎င်သသည် DHCP မဟတစ်ဆင့် တူညီသောလိပ်စာကို ရယူရန်အတလက် အရေသကဌီသပါသည်။
    • ကလန်ရက်ဆက်တင်မျာသ
    • သစ်လုံသမျာသ၏ အရလယ်အစာသကို ကန့်သတ်ထာသသည်။
    • ပဌင်ပဒရိုက်ကို အလုပ်အတလက် ပဌင်ဆင်နေပါသည် (သက်ဆိုင်ရာ ရလေသချယ်ခလင့်ကို ဖလင့်ထာသပဌီသ ဒရိုက်သည် အသစ်ဖဌစ်ပါက)
  3. postgresq ကိုစတင်ပါ။
  4. ပဌန်လည်ရယူခဌင်သဝန်ဆောင်မဟုစတင်သည်။ zabbix ကိုယ်တိုင်နဟင့် ၎င်သ၏ဒေတာဘေ့စ်ကို ပဌင်ဆင်ရန် လိုအပ်သည်-
    • zabbix ဒေတာဘေ့စ် ရဟိနဟင့်ပဌီသသာသ ရဟိမရဟိ စစ်ဆေသပါ။ မဟုတ်ပါက၊ ၎င်သကို ကနညသသတ်မဟတ်ခဌင်သ အမဟိုက်ပုံမျာသ (zabbix ပါ၀င်သည်) မဟ ဖန်တီသထာသသည်။
    • အချိန်ဇုန်မျာသစာရင်သကို ဖန်တီသထာသသည် (၎င်သတို့ကို ဝဘ်အင်တာဖေ့စ်တလင် ပဌသရန် လိုအပ်သည်)
    • လက်ရဟိ IP ကို ​​တလေ့ရဟိပဌီသ ပဌဿနာတလင် ပဌသနေသည် (ကလန်ဆိုသလ်သို့ ဝင်ရောက်ရန် ဖိတ်ကဌာသချက်)
  5. ဖိတ်ကဌာသချက် အပဌောင်သအလဲမျာသ - အဆင်သင့်လုပ်ရန် ဟူသော စကာသစု ပေါ်လာသည်။
  6. Firmware သည် အသုံသပဌုရန် အသင့်ဖဌစ်နေပါပဌီ။

ဝန်ဆောင်မဟုဖိုင်မျာသသည် အရေသကဌီသသည်၊ ၎င်သတို့သည် ၎င်သတို့၏ လလဟင့်တင်မဟု၏ အစီအစဥ်ကို သတ်မဟတ်ပေသသည်။

[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

သင်တလေ့မဌင်ရသည့်အတိုင်သ၊ ကျလန်ုပ်၏ script ကို ညသစလာအလုပ်လုပ်စေရန် မဟီခိုအာသထာသမဟုမျာသကို ထည့်သလင်သပဌီသမဟသာ ကလန်ရက်တက်လာပဌီသ 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 အတလက် timer ဝန်ဆောင်မဟု

Systemd သည် CRON ကိုအစာသထိုသနိုင်သည်။ အလေသအနက်ထာသ။ ထို့အပဌင်၊ တိကျမဟုမဟာ တစ်မိနစ်အထိမဟုတ်သော်လည်သ တစ်စက္ကန့်အထိ (လိုအပ်ပါက မည်သို့လုပ်ဆောင်မည်နည်သ) သို့မဟုတ် ဖဌစ်ရပ်တစ်ခုမဟ အချိန်ကုန်သလာသခဌင်သဟုခေါ်သော ငလီသငဟေ့နေသည့်အချိန်တိုင်သကို သင်ဖန်တီသနိုင်သည်။
၎င်သသည် ကျလန်ုပ်ဖန်တီသခဲ့သည့် စက်စတင်ချိန်မဟ အချိန်ကို ရေတလက်သည့် ငလီနီသော အချိန်တိုင်သကိရိယာဖဌစ်သည်။
၎င်သသည် ဖိုင် ၂ ဖိုင် လိုအပ်မည်ဖဌစ်သည်။
logrotateTimer.service - ဝန်ဆောင်မဟု၏ အမဟန်တကယ်ဖော်ပဌချက်-

[Unit]
Description=run logrotate

[Service]
ExecStart=logrotate /etc/logrotate.conf
TimeoutSec=300

ရိုသရဟင်သသည် - launch command ၏ဖော်ပဌချက်။
ဒုတိယဖိုင် logrotateTimer.timer သည် တိုင်မာမျာသ အလုပ်လုပ်သည့်နေရာဖဌစ်သည်-

[Unit]
Description=Run logrotate

[Timer]
OnBootSec=15min
OnUnitActiveSec=15min

[Install]
WantedBy=timers.target

ဒီမဟာ ဘာလဲ-

  • timer ဖော်ပဌချက်
  • ပထမဆုံသ စတင်ချိန်၊ စနစ်စတင်ချိန်မဟ စတင်သည်။
  • ထပ်မံလလဟင့်တင်မည့်ကာလ
  • timer ဝန်ဆောင်မဟုအပေါ် မူတည်. အမဟန်တော့၊ ဒါက timer ကို ပဌုလုပ်ပေသတဲ့ string ဖဌစ်ပါတယ်။

ပိတ်သည့်အခါ အပဌန်အလဟန်အကျိုသပဌုသော ဇာတ်ညလဟန်သနဟင့် သင်၏ပိတ်ပစ်ရန် ပစ်မဟတ်

အခဌာသသော ဖလံ့ဖဌိုသတိုသတက်မဟုတလင်၊ လုပ်ဆောင်ချက်မျာသစလာကို လုပ်ဆောင်ရန်အတလက် ကျလန်ုပ်၏ကိုယ်ပိုင်ပစ်မဟတ်မဟတစ်ဆင့် စက်ကိုပိတ်ရန် ပိုမိုရဟုပ်ထလေသသောဗာသရဟင်သကို လုပ်ဆောင်ရမည်ဖဌစ်သည်။ RemainAfterExit ရလေသချယ်မဟုဖဌင့် oneshot ဝန်ဆောင်မဟုကို ဖန်တီသရန် မျာသသောအာသဖဌင့် အကဌံပဌုထာသသော်လည်သ ၎င်သသည် သင့်အာသ အပဌန်အလဟန်အကျိုသပဌုသော script တစ်ခုဖန်တီသခဌင်သမဟ တာသဆီသပေသပါသည်။

သို့သော်အမဟန်မဟာ ExecOnStop ရလေသချယ်မဟုမဟထုတ်လလဟတ်သော command မျာသကို TTY ပဌင်ပတလင်လုပ်ဆောင်နေခဌင်သဖဌစ်သည်။ စစ်ဆေသရန် လလယ်ကူသည် - tty command ကို paste လုပ်ပဌီသ ၎င်သ၏ output ကို သိမ်သဆည်သပါ။

ထို့ကဌောင့် ကျလန်ုပ်သည် ကျလန်ုပ်၏ပစ်မဟတ်ဖဌင့် ပိတ်ပစ်ခဌင်သကို အကောင်အထည်ဖော်ခဲ့ပါသည်။ 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 script ကိုလုပ်ဆောင်ရန်-

[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

  • ကဇာတ်ညလဟန်သတလင် ကျလန်ုပ်သည် လိုအပ်သော လုပ်ဆောင်ချက်မျာသကို လုပ်ဆောင်ပါသည်။ ပဌောင်သလလယ်ပဌင်လလယ်နဟင့် အဆင်ပဌေစေရန် ပစ်မဟတ်သို့ script အမျာသအပဌာသကို သင်ထည့်နိုင်သည်။

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 ခုရဟိပါတယ်။

  • သင့် script နဟင့် reboot၊ shutdown နဟင့် အခဌာသသော commands (၎င်သတို့သည် systemctl ၏ ​​symlinks မျာသဖဌစ်နေဆဲ) ကို အစာသထိုသပါ။ script အတလင်သ၊ my_shutdown.target သို့ သလာသပါ။ ပစ်မဟတ်အတလင်သရဟိ script မျာသသည် systemctl ကိုတိုက်ရိုက်ခေါ်ဆိုပါ၊ ဥပမာ၊ systemctl ပဌန်လည်စတင်ပါ။
  • ပိုရိုသရဟင်သတဲ့ ရလေသချယ်မဟုတစ်ခု၊ ဒါပေမယ့် ကျလန်တော်မကဌိုက်ဘူသ။ အင်တာဖေ့စ်အာသလုံသတလင်၊ shutdown/reboot/other ကိုမခေါ်ပါနဟင့်၊ သို့သော် ပစ်မဟတ် systemctl isolate my_shutdown.target ကို တိုက်ရိုက်ခေါ်ဆိုပါ။

ပထမရလေသချယ်မဟုကို ငါရလေသချယ်ခဲ့တယ်။ systemd တလင်၊ reboot (poweroff ကဲ့သို့) သည် systemd သို့ symlink မျာသဖဌစ်သည်။

ls -l /sbin/poweroff 
lrwxrwxrwx 1 root root 14 сеМ 30 18:23 /sbin/poweroff -> /bin/systemctl

ထို့ကဌောင့်၊ ၎င်သတို့ကို သင့်ကိုယ်ပိုင် script မျာသဖဌင့် အစာသထိုသနိုင်သည်-
reboot လုပ်ပါ

#!/bin/sh
    touch /tmp/reboot
    sudo systemctl isolate my_shutdown.target
fi

source: www.habr.com

မဟတ်ချက် Add