Linux ရဟိ Cron- မဟတ်တမ်သ၊ အသုံသပဌုမဟုနဟင့် စက်

Linux ရဟိ Cron- မဟတ်တမ်သ၊ အသုံသပဌုမဟုနဟင့် စက်

ပျော်ရလဟင်ဖလယ်နာရီမျာသကို မကဌည့်ရဟု ဂန္ထဝင်က ရေသသာသခဲ့သည်။ ထိုတောရိုင်သအချိန်မျာသတလင် ပရိုဂရမ်မာမျာသရော Unix မရဟိကဌသော်လည်သ ယနေ့ခေတ် ပရိုဂရမ်မာမျာသသည် သေချာစလာသိပါသည်- cron သည် ၎င်သတို့အစာသ အချိန်ကို ခဌေရာခံပါမည်။

Command Line utilities တလေက ကျလန်တော့်အတလက် အာသနည်သချက်တစ်ခုဖဌစ်သလို sed၊ awk၊ wc၊ cut နဟင့် အခဌာသသော ပရိုဂရမ်ဟောင်သမျာသကို ကျလန်ုပ်တို့၏ဆာဗာမျာသပေါ်တလင် နေ့စဉ် script မျာသဖဌင့် လုပ်ဆောင်ပါသည်။ ၎င်သတို့ထဲမဟ အမျာသအပဌာသကို cron အတလက် အလုပ်မျာသအဖဌစ် ဒီဇိုင်သထုတ်ထာသပဌီသ 70s မျာသမဟ အစပဌုသော အချိန်ဇယာသရေသဆလဲသူဖဌစ်သည်။

ငါ cron ကို အပေါ်ယံအာသဖဌင့် အချိန်အတော်ကဌာအောင် အသေသစိတ်မဖော်ပဌထာသဘဲ၊ ဒါပေမယ့် တစ်နေ့မဟာ script တစ်ခုကို run တဲ့အခါ error တစ်ခုတလေ့လို့ သေချာကဌည့်ဖို့ ဆုံသဖဌတ်လိုက်တယ်။ ကဆောင်သပါသပေါ်လာပုံ၊ ၎င်သကိုရေသနေစဉ်တလင် လူကဌိုက်မျာသသော Linux ဖဌန့်ဝေမဟုမျာသတလင် အဓိက cron ရလေသချယ်မဟုမျာသနဟင့် ၎င်သတို့အချို့၏ ဖလဲ့စည်သပုံနဟင့် ရင်သနဟီသလာခဲ့သည်။

သင်သည် Linux ကိုအသုံသပဌုပဌီသ cron အလုပ်မျာသကို လုပ်ဆောင်နေပါသလာသ။ Unix တလင် system application architecture ကို သင်စိတ်ဝင်စာသပါသလာသ။ ပဌီသရင် ငါတို့သလာသမယ်။

အကဌောင်သအရာ

မျိုသစိတ်မျာသ၏မူလအစ

အသုံသပဌုသူ သို့မဟုတ် စနစ်ပရိုဂရမ်မျာသကို အချိန်အခါအလိုက် လုပ်ဆောင်ခဌင်သသည် လည်ပတ်မဟုစနစ်အာသလုံသတလင် သိသာထင်ရဟာသသော လိုအပ်ချက်တစ်ခုဖဌစ်သည်။ ထို့ကဌောင့်၊ ပရိုဂရမ်မာမျာသသည် အချိန်ကဌာမဌင့်စလာကတည်သက ၎င်သတို့အာသ ဗဟိုမဟ အစီအစဉ်ဆလဲပဌီသ လုပ်ဆောင်နိုင်စေမည့် ဝန်ဆောင်မဟုမျာသ လိုအပ်ကဌောင်သ သဘောပေါက်ခဲ့ကဌသည်။

Unix ကဲ့သို့သော လည်ပတ်မဟုစနစ်မျာသသည် ကျော်ကဌာသသော Ken Thompson အပါအဝင် ပဌီသခဲ့သောရာစုနဟစ် 7 ခုနဟစ်မျာသအတလင်သ Bell Labs တလင် တီထလင်ခဲ့သည့် Version 70 Unix သို့ ပဌန်လည်ခဌေရာခံသည်။ ဗာသရဟင်သ 7 Unix တလင် ပုံမဟန် superuser လုပ်ဆောင်စရာမျာသ လုပ်ဆောင်ရန်အတလက် cron ဝန်ဆောင်မဟုလည်သ ပါဝင်ပါသည်။

ပုံမဟန်ခေတ်မီ cron သည် ရိုသရဟင်သသောပရိုဂရမ်တစ်ခုဖဌစ်သော်လည်သ မူရင်သဗာသရဟင်သ၏လည်ပတ်မဟု algorithm သည် ပို၍ပင်ရိုသရဟင်သပါသည်- ဝန်ဆောင်မဟုသည် တစ်မိနစ်လျဟင်တစ်ကဌိမ်နိုသလာပဌီသ ဖိုင်တစ်ခုတည်သ (/etc/lib/crontab) မဟ လုပ်ဆောင်စရာမျာသပါသည့် ဇယာသကိုဖတ်ပဌီသ ၎င်သအတလက် လုပ်ဆောင်သည်။ လက်ရဟိအခိုက်အတန့်တလင် လုပ်ဆောင်သင့်သည့် အလုပ်မျာသကို superuser လုပ်ပါ။

နောက်ပိုင်သတလင်၊ ရိုသရဟင်သပဌီသ အသုံသဝင်သော ဝန်ဆောင်မဟု၏ ပိုမိုကောင်သမလန်သောဗာသရဟင်သမျာသကို Unix ကဲ့သို့သော လည်ပတ်မဟုစနစ်မျာသအာသလုံသတလင် ပံ့ပိုသပေသခဲ့ပါသည်။

crontab ဖော်မတ်၏ ယေဘူယျဖော်ပဌချက်မျာသနဟင့် utility ၏လုပ်ဆောင်ချက်မျာသ၏ အခဌေခံမူမျာသသည် Unix-like operating systems - POSIX - 1992 တလင် ထည့်သလင်သခဲ့ပဌီသ၊ ထို့ကဌောင့် de facto standard မဟ cron သည် de jure standard ဖဌစ်လာခဲ့သည်။

1987 ခုနဟစ်တလင် Paul Vixie သည် Unix အသုံသပဌုသူမျာသ cron အတလက် ၎င်သတို့၏ဆန္ဒမျာသကို စစ်တမ်သကောက်ယူပဌီသနောက် ရိုသရာ cron ၏ ပဌဿနာအချို့ကို ပဌုပဌင်ပေသကာ ဇယာသဖိုင်မျာသ၏ syntax ကို ချဲ့ထလင်သည့် daemon ၏ နောက်ထပ်ဗာသရဟင်သကို ထုတ်ပဌန်ခဲ့သည်။

Vixie cron ၏တတိယဗာသရဟင်သတလင် POSIX လိုအပ်ချက်မျာသနဟင့် ပဌည့်မီတော့သည်၊ ထို့အပဌင်၊ ပရိုဂရမ်တလင် လစ်ဘရယ်လိုင်စင်တစ်ခုရဟိသည်၊ သို့မဟုတ် README ရဟိဆန္ဒမျာသမဟလလဲ၍ လုံသဝလိုင်စင်မရဟိပါ- စာရေသသူက အာမခံမပေသပါ၊ စာရေသသူအမည်၊ ဖျက်၍မရပါ၊ ပရိုဂရမ်ကို အရင်သအမဌစ်ကုဒ်ဖဌင့်သာ ရောင်သချနိုင်သည်။ ကလိုအပ်ချက်မျာသသည် ထိုနဟစ်မျာသအတလင်သ လူကဌိုက်မျာသလာနေသော အခမဲ့ဆော့ဖ်ဝဲ၏ အခဌေခံသဘောတရာသမျာသနဟင့် သဟဇာတဖဌစ်လာခဲ့သောကဌောင့် 90s အစောပိုင်သတလင်တလေ့ရသော အဓိက Linux ဖဌန့်ဖဌူသမဟုအချို့သည် Vixie cron ကို ၎င်သတို့၏စနစ်တစ်ခုအဖဌစ် လက်ခံခဲ့ပဌီသ ယနေ့အထိ ဆက်လက်လုပ်ဆောင်နေဆဲဖဌစ်သည်။

အထူသသဖဌင့်၊ Red Hat နဟင့် SUSE တို့သည် Vixie cron - cronie ၏လမ်သဆုံလမ်သခလကို တီထလင်ခဲ့ပဌီသ Debian နဟင့် Ubuntu တို့သည် ဖာထေသမျာသစလာဖဌင့် Vixie cron ၏ မူရင်သထုတ်ဝေမဟုကို အသုံသပဌုသည်။

POSIX တလင်ဖော်ပဌထာသသောအသုံသပဌုသူ၏ utility crontab ကို ညသစလာရင်သနဟီသကဌပါစို့၊ ထို့နောက် Vixie cron တလင်ပေသထာသသော syntax extension မျာသနဟင့်လူကဌိုက်မျာသသော Linux ဖဌန့်ဝေမဟုမျာသတလင် Vixie cron ၏ပုံစံကလဲမျာသအသုံသပဌုမဟုကို ကျလန်ုပ်တို့ကဌည့်ရဟုပါမည်။ နောက်ဆုံသအနေနဟင့်၊ ကိတ်မုန့်ပေါ်ရဟိချယ်ရီသည် cron daemon ကိရိယာ၏ခလဲခဌမ်သစိတ်ဖဌာမဟုဖဌစ်သည်။

POSIX crontab

မူရင်သ cron သည် superuser အတလက် အမဌဲအလုပ်လုပ်နေပါက၊ ခေတ်မီအချိန်ဇယာသမျာသသည် သာမာန်အသုံသပဌုသူမျာသ၏ လုပ်ငန်သဆောင်တာမျာသကို လုပ်ဆောင်လေ့ရဟိပဌီသ ပိုမိုလုံခဌုံပဌီသ အဆင်ပဌေသည်။

Crons ကို ပရိုဂရမ်နဟစ်ခု၏အစုတစ်ခုအနေဖဌင့် ထောက်ပံ့ပေသသည်- အဆက်မပဌတ်လည်ပတ်နေသော cron daemon နဟင့် သုံသစလဲသူမျာသအတလက်ရရဟိနိုင်သော crontab utility။ daemon သည် အသုံသပဌုသူနဟင့် စနစ်ဇယာသမျာသမဟ လုပ်ဆောင်စရာမျာသကို စတင်လုပ်ဆောင်နေချိန်တလင် စနစ်အတလင်သရဟိ သုံသစလဲသူတစ်ညသစီအတလက် သီသခဌာသလုပ်ဆောင်စရာဇယာသမျာသကို တည်သဖဌတ်နိုင်စေမည်ဖဌစ်သည်။

В POSIX စံနဟုန်သ daemon ၏ အပဌုအမူကို မည်သည့်နည်သနဟင့်မျဟ ဖော်ပဌထာသခဌင်သ မရဟိဘဲ အသုံသပဌုသူ ပရိုဂရမ်ကိုသာ တရာသဝင်ဖဌစ်အောင် ပဌုလုပ်ထာသသည်။ ကလမ်သခဌံကုန်သ. အသုံသပဌုသူလုပ်ဆောင်စရာမျာသကို စတင်ရန်အတလက် ယန္တရာသမျာသတည်ရဟိနေခဌင်သသည် အဓိပ္ပါယ်ရဟိသော်လည်သ အသေသစိတ်ဖော်ပဌထာသခဌင်သမရဟိပေ။

crontab utility ကိုခေါ်ဆိုခဌင်သဖဌင့် သင်သည် အရာလေသခုကို လုပ်ဆောင်နိုင်သည်- တည်သဖဌတ်သူရဟိ အသုံသပဌုသူ၏လုပ်ငန်သဆောင်တာဇယာသကို တည်သဖဌတ်ရန်၊ ဖိုင်တစ်ခုမဟဇယာသကို တင်ရန်၊ လက်ရဟိလုပ်ဆောင်စရာဇယာသကို ပဌသရန်နဟင့် အလုပ်ဇယာသကို ရဟင်သလင်သပါ။ crontab utility ၏အလုပ်လုပ်ပုံဥပမာမျာသ-

crontab -e # реЎактОрПвать таблОцу заЎач
crontab -l # пПказать таблОцу заЎач
crontab -r # уЎалОть таблОцу заЎач
crontab path/to/file.crontab # загрузОть таблОцу заЎач Оз файла

ခေါ်တဲ့အခါ crontab -e standard environment variable တလင် သတ်မဟတ်ထာသသော တည်သဖဌတ်သူကို အသုံသပဌုပါမည်။ EDITOR.

အလုပ်မျာသကို ၎င်သတို့ကိုယ်တိုင် အောက်ပါဖော်မတ်မျာသဖဌင့် ဖော်ပဌထာသပါသည်။

# стрПкО-кПЌЌеМтарОО ОгМПрОруются
#
# заЎача, выпПлМяеЌая ежеЌОМутМП
* * * * * /path/to/exec -a -b -c
# заЎача, выпПлМяеЌая Ма 10-й ЌОМуте кажЎПгП часа
10 * * * * /path/to/exec -a -b -c
# заЎача, выпПлМяеЌая Ма 10-й ЌОМуте втПрПгП часа кажЎПгП ЎМя О ОспПльзующая переМаправлеМОе стаМЎартМПгП пПтПка вывПЎа
10 2 * * * /path/to/exec -a -b -c > /tmp/cron-job-output.log

မဟတ်တမ်သမျာသ၏ ပထမနယ်ပယ်ငါသခု- မိနစ် [1..60]၊ နာရီ [0..23]၊ လ၏ရက်မျာသ [1..31]၊ လ [1..12]၊ ရက်သတ္တပတ်၏ရက်မျာသ [0. .၆] ၀တ်ပဌုရာက တနင်္ဂနလေ။ နောက်ဆုံသ၊ ဆဋ္ဌမ၊ အကလက်သည် စံအမိန့်ပေသစကာသပဌန်ဖဌင့် လုပ်ဆောင်မည့် လိုင်သတစ်ခုဖဌစ်သည်။

ပထမအကလက်ငါသကလက်တလင် တန်ဖိုသမျာသကို ကော်မာမျာသဖဌင့် ခလဲခဌာသဖော်ပဌနိုင်သည်-

# заЎача, выпПлМяеЌая в первую О Ўесятую ЌОМуты кажЎПгП часа
1,10 * * * * /path/to/exec -a -b -c

သို့မဟုတ် တုံသတိုဖဌင့်-

# заЎача, выпПлМяеЌая в кажЎую Оз первых ЎесятО ЌОМут кажЎПгП часа
0-9 * * * * /path/to/exec -a -b -c

လုပ်ဆောင်စရာအချိန်ဇယာသဆလဲခဌင်သသို့ အသုံသပဌုသူဝင်ရောက်ခလင့်ကို cron.allow နဟင့် cron.deny ဖိုင်မျာသက POSIX တလင် ထိန်သချုပ်ထာသပဌီသ၊ ၎င်သသည် crontab သို့ဝင်ရောက်ခလင့်ရဟိသောအသုံသပဌုသူမျာသစာရင်သသလင်သခဌင်သနဟင့် ပရိုဂရမ်ကိုဝင်ရောက်ခလင့်မရဟိဘဲအသုံသပဌုသူမျာသအသီသသီသရဟိကဌသည်။ စံနဟုန်သသည် ကဖိုင်မျာသ၏တည်နေရာကို မည်သည့်နည်သဖဌင့်မျဟ ထိန်သညဟိမထာသပေ။

စံနဟုန်သအရ၊ အနည်သဆုံသ ပတ်ဝန်သကျင် ကိန်သရဟင် လေသခုကို စတင်ဆောင်ရလက်သည့် ပရိုဂရမ်မျာသသို့ ကျော်ဖဌတ်ရမည်-

  1. HOME - အသုံသပဌုသူ၏ ပင်မလမ်သညလဟန်။
  2. LOGNAME — အသုံသပဌုသူ လော့ဂ်အင်။
  3. PATH သည် standard system utilities မျာသကို သင်ရဟာဖလေနိုင်သည့် လမ်သကဌောင်သဖဌစ်သည်။
  4. SHELL — သုံသထာသသော command စကာသပဌန်သို့ လမ်သကဌောင်သ။

မဟတ်သာသစရာမဟာ POSIX သည် ကကိန်သရဟင်မျာသအတလက် တန်ဖိုသမျာသ မည်သည့်နေရာမဟ လာသည်နဟင့် ပတ်သက်၍ ဘာမဟ မပဌောပါ။

ရောင်သအာသအကောင်သဆုံသ - Vixie cron 3.0pl1

လူကဌိုက်မျာသသော cron မျိုသကလဲမျာသ၏ ဘုံဘိုသဘေသမဟာ Vixie cron 3.0pl1 ဖဌစ်ပဌီသ 1992 ခုနဟစ်တလင် comp.sources.unix စာပို့စာရင်သတလင် မိတ်ဆက်ခဲ့သည်။ ကျလန်ုပ်တို့သည် ကဗာသရဟင်သ၏ အဓိကအင်္ဂါရပ်မျာသကို ပိုမိုအသေသစိတ်သုံသသပ်ပါမည်။

Vixie cron သည် ပရိုဂရမ်နဟစ်ခု (cron နဟင့် crontab) ဖဌင့် လာသည်။ ပုံမဟန်အတိုင်သ၊ daemon သည် system task table နဟင့် user တစ်ညသချင်သစီ၏ task tables မဟလုပ်ဆောင်စရာမျာသကိုဖတ်ရဟုခဌင်သနဟင့်လုပ်ဆောင်ခဌင်သအတလက်တာဝန်ရဟိပဌီသ crontab utility သည်အသုံသပဌုသူဇယာသမျာသကိုတည်သဖဌတ်ရန်တာဝန်ရဟိသည်။

Task table နဟင့် configuration ဖိုင်မျာသ

superuser task table သည် /etc/crontab တလင်တည်ရဟိသည်။ စနစ်ဇယာသ၏ syntax သည် Vixie cron ၏ syntax နဟင့် သက်ဆိုင်ပဌီသ၊ ၎င်သတလင်ရဟိသော ဆဋ္ဌမကော်လံသည် လုပ်ဆောင်စရာကို စတင်လုပ်ဆောင်သည့်အသုံသပဌုသူ၏အမည်ကို ဖော်ပဌခဌင်သမဟလလဲ၍

# Запускается ежеЌОМутМП Пт пПльзПвателя vlad
* * * * * vlad /path/to/exec

ပုံမဟန်အသုံသပဌုသူလုပ်ငန်သဆောင်တာဇယာသမျာသကို /var/cron/tabs/username တလင် တည်ရဟိပဌီသ တူညီသော syntax ကိုအသုံသပဌုပါ။ သင်အသုံသပဌုသူတစ်ညသအနေဖဌင့် crontab utility ကိုဖလင့်သောအခါ၊ ကအရာမျာသသည် တည်သဖဌတ်ထာသသည့်ဖိုင်မျာသဖဌစ်သည်။

crontab သို့ဝင်ရောက်ခလင့်ရဟိသောအသုံသပဌုသူမျာသစာရင်သမျာသကို /var/cron/allow နဟင့် /var/cron/deny ဖိုင်မျာသတလင် စီမံထာသပဌီသ၊ သင်သည် သီသခဌာသစာကဌောင်သတစ်ခုတလင် အသုံသပဌုသူအမည်ကိုထည့်ရန်သာလိုသည်။

တိုသချဲ့ထာသသော အထာသအသို

POSIX crontab နဟင့် နဟိုင်သယဟဉ်ပါက Paul Vixey ၏ဖဌေရဟင်သချက်တလင် utility ၏လုပ်ငန်သဆောင်တာဇယာသမျာသ၏ syntax အတလက် အလလန်အသုံသဝင်သော ပဌုပဌင်မလမ်သမံမဟုမျာသပါရဟိသည်။

ဇယာသအထာသအသိုအသစ်တစ်ခု ရနိုင်ပါပဌီ- ဥပမာ၊ သင်သည် အမည်ဖဌင့် ရက်သတ္တပတ်၏ ရက်မျာသ သို့မဟုတ် လမျာသကို (တနင်္လာနေ့၊ အင်္ဂါနေ့ စသည်တို့ဖဌင့် သတ်မဟတ်နိုင်သည်)။

# Запускается ежеЌОМутМП пП пПМеЎельМОкаЌ О втПрМОкаЌ в яМваре
* * * Jan Mon,Tue /path/to/exec

မည်သည့်အလုပ်မျာသကို စတင်လုပ်ဆောင်သည့်အဆင့်ကို သင်သတ်မဟတ်နိုင်သည်-

# Запускается с шагПЌ в Ўве ЌОМуты
*/2 * * * Mon,Tue /path/to/exec

အဆင့်မျာသနဟင့် ကဌာသကာလမျာသကို ရောစပ်နိုင်သည်။

# Запускается с шагПЌ в Ўве ЌОМуты в первых Ўесять ЌОМут кажЎПгП часа
0-10/2 * * * * /path/to/exec

ပုံမဟန် syntax ၏ အလိုလိုသိနိုင်သော အခဌာသရလေသချယ်မဟုမျာသကို ပံ့ပိုသပေသသည် (ပဌန်လည်စတင်ခဌင်သ၊ နဟစ်စဉ်၊ နဟစ်စဉ်၊ လစဉ်၊ အပတ်စဉ်၊ နေ့စဉ်၊ သန်သခေါင်ယံ၊ နာရီတိုင်သ)

# Запускается пПсле перезагрузкО сОстеЌы
@reboot /exec/on/reboot
# Запускается раз в ЎеМь
@daily /exec/daily
# Запускается раз в час
@hourly /exec/daily

Task execution ပတ်ဝန်သကျင်

Vixie cron သည် သင့်အာသ လုပ်ဆောင်နေသည့် အက်ပ်လီကေသရဟင်သမျာသ၏ ပတ်ဝန်သကျင်ကို ပဌောင်သလဲနိုင်စေပါသည်။

Environment variable မျာသကို USER၊ LOGNAME နဟင့် HOME သည် daemon မဟပေသဆောင်သည်မဟုတ်ဘဲ ဖိုင်တစ်ခုမဟ ယူဆောင်သလာသခဌင်သဖဌစ်သည်။ passwd. PATH variable ကို "/usr/bin:/bin" ဟုသတ်မဟတ်ထာသပဌီသ SHELL variable ကို "/bin/sh" ဟုသတ်မဟတ်ထာသသည်။ LOGNAME မဟလလဲ၍ ကိန်သရဟင်အာသလုံသ၏ တန်ဖိုသမျာသကို အသုံသပဌုသူဇယာသမျာသတလင် ပဌောင်သလဲနိုင်ပါသည်။

အချို့သော Environment variables (အထူသသဖဌင့် SHELL နဟင့် HOME) ကို လုပ်ဆောင်ရန်အတလက် cron ကိုယ်တိုင်က အသုံသပဌုပါသည်။ ကသည်မဟာ စိတ်ကဌိုက်လုပ်ဆောင်စရာမျာသကို လုပ်ဆောင်ရန် standard sh အစာသ bash ကို အသုံသပဌုခဌင်သမဟာ အောက်ပါအတိုင်သ ဖဌစ်နိုင်ပါသည်။

SHELL=/bin/bash
HOME=/tmp/
# exec буЎет запущеМ bash-еЌ в /tmp/
* * * * * /path/to/exec

အဆုံသစလန်အာသဖဌင့်၊ ဇယာသတလင်သတ်မဟတ်ထာသသောပတ်ဝန်သကျင် variable အာသလုံသကို (cron ဖဌင့်အသုံသပဌုသည် သို့မဟုတ် လုပ်ငန်သစဉ်မဟလိုအပ်သော) သည် လုပ်ဆောင်နေသည့်အလုပ်သို့ ပေသပို့မည်ဖဌစ်သည်။

ဖိုင်မျာသကို တည်သဖဌတ်ရန်၊ crontab သည် VISUAL သို့မဟုတ် EDITOR ပတ်၀န်သကျင် ပဌောင်သလဲနိုင်သော ပဌောင်သလဲမဟုတလင် သတ်မဟတ်ထာသသည့် တည်သဖဌတ်သူကို အသုံသပဌုသည်။ crontab ကိုလည်ပတ်သည့်ပတ်ဝန်သကျင်တလင် ကကိန်သရဟင်မျာသကိုသတ်မဟတ်မထာသပါက "/usr/ucb/vi" ကိုအသုံသပဌုသည် (ucb သည် University of California၊ Berkeley ဖဌစ်နိုင်သည်)။

Debian နဟင့် Ubuntu တလင် cron

Debian ၏ developer မျာသနဟင့် derivative distributions မျာသ ထလက်ရဟိလာပါပဌီ။ အလလန်ပဌုပဌင်ထာသသောဗာသရဟင်သ Vixie cron ဗာသရဟင်သ 3.0pl1။ ဇယာသဖိုင်မျာသ၏ syntax တလင်ကလဲပဌာသမဟုမရဟိပါ၊ အသုံသပဌုသူမျာသအတလက်၎င်သသည်တူညီသော Vixie cron ဖဌစ်သည်။ အကဌီသမာသဆုံသအင်္ဂါရပ်- ပံ့ပိုသမဟု syslog, selinux О Pam.

သိသာထင်ရဟာသမဟုနည်သသော်လည်သ မဌင်သာထင်သာသောပဌောင်သလဲမဟုမျာသတလင် ဖလဲ့စည်သမဟုဖိုင်မျာသနဟင့် လုပ်ဆောင်စရာဇယာသမျာသ၏တည်နေရာပါဝင်သည်။

Debian ရဟိ အသုံသပဌုသူဇယာသမျာသသည် /var/spool/cron/crontabs လမ်သညလဟန်တလင် တည်ရဟိပဌီသ စနစ်ဇယာသသည် /etc/crontab တလင်ရဟိနေဆဲဖဌစ်သည်။ Debian package-specific task tables မျာသကို cron daemon အလိုအလျောက်ဖတ်သည့်နေရာမဟ /etc/cron.d တလင် ထာသရဟိထာသပါသည်။ အသုံသပဌုသူဝင်ရောက်ခလင့်ထိန်သချုပ်မဟုကို /etc/cron.allow နဟင့် /etc/cron.deny ဖိုင်မျာသမဟ ထိန်သချုပ်ထာသသည်။

မူရင်သ shell သည် /bin/sh ဖဌစ်နေဆဲဖဌစ်ပဌီသ၊ Debian တလင် POSIX-လိုက်လျောညီထလေရဟိသော shell လေသတစ်ခုဖဌစ်သည် dashဖလဲ့စည်သမဟုပုံစံကိုဖတ်ခဌင်သမပဌုဘဲ (အပဌန်အလဟန်အကျိုသသက်ရောက်မဟုမရဟိသောမုဒ်တလင်) စတင်ခဲ့သည်။

Debian ၏နောက်ဆုံသထလက်ဗာသရဟင်သမျာသတလင် Cron ကိုယ်တိုင်က systemd မဟတစ်ဆင့် စတင်ခဲ့ပဌီသ၊ launch configuration ကို /lib/systemd/system/cron.service တလင် ကဌည့်ရဟုနိုင်ပါသည်။ ဝန်ဆောင်မဟုဖလဲ့စည်သပုံတလင် အထူသအထလေမရဟိပါ၊ သုံသစလဲသူတစ်ညသစီ၏ crontab တလင် တိုက်ရိုက်ကဌေငဌာထာသသော ပတ်၀န်သကျင် variable မျာသမဟတစ်ဆင့် ပိုမိုသိမ်မလေ့သော လုပ်ဆောင်စရာစီမံခန့်ခလဲမဟုကို လုပ်ဆောင်နိုင်ပါသည်။

RedHat၊ Fedora နဟင့် CentOS တလင် ခရိုနီ

ခရိုနီ - Vixie cron ဗာသရဟင်သ 4.1 ၏လမ်သဆုံ။ Debian တလင်ကဲ့သို့ပင် syntax သည် ပဌောင်သလဲခဌင်သမရဟိသော်လည်သ PAM နဟင့် SELinux အတလက် ပံ့ပိုသမဟု၊ အစုအဝေသတစ်ခုတလင် အလုပ်လုပ်သည်၊ inotify နဟင့် အခဌာသအင်္ဂါရပ်မျာသကို အသုံသပဌုထာသသော ဖိုင်မျာသကို ခဌေရာခံပဌီသ ထည့်သလင်သထာသသည်။

ပုံသေဖလဲ့စည်သပုံသည် ပုံမဟန်နေရာမျာသတလင်ဖဌစ်သည်- စနစ်ဇယာသသည် /etc/crontab တလင်ရဟိပဌီသ၊ အထုပ်မျာသသည် ၎င်သတို့၏ဇယာသမျာသကို /etc/cron.d တလင်ထည့်သည်၊ အသုံသပဌုသူဇယာသမျာသသည် /var/spool/cron/crontabs သို့သလာသပါသည်။

daemon သည် systemd ထိန်သချုပ်မဟုအောက်တလင်အလုပ်လုပ်သည်၊ ဝန်ဆောင်မဟုဖလဲ့စည်သပုံသည် /lib/systemd/system/crond.service ဖဌစ်သည်။

Red Hat ကဲ့သို့ ဖဌန့်ဝေမဟုမျာသတလင်၊ /bin/sh ကို စံ bash ဖဌစ်သည့် startup တလင် ပုံသေဖဌင့် အသုံသပဌုပါသည်။ /bin/sh မဟတဆင့် cron အလုပ်မျာသကို လုပ်ဆောင်သောအခါ၊ bash shell သည် POSIX-လိုက်လျောညီထလေဖဌစ်သောမုဒ်တလင်စတင်ပဌီသ အပဌန်အလဟန်အကျိုသသက်ရောက်မဟုမရဟိသောမုဒ်တလင်လုပ်ဆောင်နေသည့်နောက်ထပ်ဖလဲ့စည်သပုံကိုဖတ်မည်မဟုတ်ကဌောင်သသတိပဌုသင့်သည်။

SLES နဟင့် openSUSE ရဟိ ခရိုနီ

ဂျာမန်ဖဌန့်ချီရေသ SLES နဟင့် ၎င်သ၏ ဆင်သသက်လာသော openSUSE တို့သည် တူညီသောခရိုနီမျာသကို အသုံသပဌုသည်။ ကနေရာတလင် daemon ကိုလည်သ systemd အောက်တလင်ဖလင့်ထာသသည်၊ ဝန်ဆောင်မဟုဖလဲ့စည်သပုံသည် /usr/lib/systemd/system/cron.service တလင်တည်ရဟိသည်။ ဖလဲ့စည်သမဟု- /etc/crontab၊ /etc/cron.d၊ /var/spool/cron/tabs။ /bin/sh သည် POSIX-လိုက်လျောညီထလေဖဌစ်သော အပဌန်အလဟန်တုံ့ပဌန်မဟုမရဟိသောမုဒ်တလင် လုပ်ဆောင်နေသည့် တူညီသော bash ဖဌစ်သည်။

Vixie cron ကိရိယာ

ခေတ်သစ် cron ၏သာသမဌေသမျာသသည် Vixie cron နဟင့် နဟိုင်သယဟဉ်လျဟင် သိသိသာသာ ပဌောင်သလဲခဌင်သမရဟိသော်လည်သ ပရိုဂရမ်၏အခဌေခံသဘောတရာသမျာသကို နာသလည်ရန်မလိုအပ်သော အင်္ဂါရပ်အသစ်မျာသကို ရရဟိနေဆဲဖဌစ်သည်။ က extension အမျာသစုသည် ဒီဇိုင်သပိုင်သ ညံ့ဖျင်သပဌီသ ကုဒ်ကို ရဟုပ်ထလေသစေသည်။ Paul Vixey ၏ မူရင်သ cron အရင်သအမဌစ်ကုဒ်ကို ဖတ်ရတာ ကဌည်နူသစရာပါပဲ။

ထို့ကဌောင့်၊ Vixie cron 3.0pl1 နဟစ်ခုစလုံသအတလက် အသုံသမျာသသော cron ပရိုဂရမ်ကို အသုံသပဌု၍ cron စက်ပစ္စည်သကို ပိုင်သခဌာသစိတ်ဖဌာရန် ဆုံသဖဌတ်ခဲ့သည်။ စာဖတ်ခဌင်သကို ရဟုပ်ထလေသစေသော ifdefs မျာသကို ဖယ်ရဟာသပဌီသအသေသစိတ်အသေသစိတ်အချက်အလက်မျာသကို ချန်လဟပ်ခဌင်သဖဌင့် နမူနာမျာသကို ရိုသရဟင်သစေပါမည်။

နတ်ဆိုသ၏လုပ်ဆောင်မဟုကို အဆင့်မျာသစလာ ခလဲခဌာသနိုင်သည်။

  1. အစီအစဉ်စတင်ခဌင်သ။
  2. လုပ်ဆောင်ရမည့် အလုပ်မျာသစာရင်သကို စုဆောင်သခဌင်သနဟင့် အပ်ဒိတ်လုပ်ခဌင်သ။
  3. အဓိက cron loop လည်ပတ်နေသည်။
  4. အလုပ်တစ်ခု စတင်ပါ။

သူတို့ကို အစဉ်လိုက်ကဌည့်ရအောင်။

စတင်ခဌင်သ

စတင်သောအခါ၊ လုပ်ငန်သစဉ်ဆိုင်ရာ အကဌောင်သပဌချက်မျာသကို စစ်ဆေသပဌီသနောက်၊ cron သည် SIGCHLD နဟင့် SIGHUP အချက်ပဌလက်ကိုင်မျာသကို ထည့်သလင်သသည်။ ပထမတစ်ခုသည် ကလေသလုပ်ငန်သစဉ်ကိုရပ်စဲခဌင်သနဟင့်ပတ်သက်၍ မဟတ်တမ်သတစ်ခုပဌုလုပ်သည်၊ ဒုတိယတစ်ခုသည် မဟတ်တမ်သဖိုင်၏ဖိုင်ဖော်ပဌချက်အာသ ပိတ်သည်-

signal(SIGCHLD, sigchld_handler);
signal(SIGHUP, sighup_handler);

cron daemon သည် superuser အဖဌစ်နဟင့် main cron directory မဟသာလျဟင် system ပေါ်တလင် တစ်ယောက်တည်သ အမဌဲလည်ပတ်ပါသည်။ အောက်ပါခေါ်ဆိုမဟုမျာသသည် daemon လုပ်ငန်သစဉ်၏ PID ဖဌင့် လော့ခ်ဖိုင်တစ်ခုဖန်တီသပဌီသ၊ အသုံသပဌုသူမဟန်ကန်ကဌောင်သ သေချာစေကာ လက်ရဟိလမ်သညလဟန်ကို ပင်မဖိုင်အဖဌစ် ပဌောင်သလဲပါ။

acquire_daemonlock(0);
set_cron_uid();
set_cron_cwd();

လုပ်ငန်သစဉ်မျာသစတင်သောအခါတလင် အသုံသပဌုမည့် ပုံသေလမ်သကဌောင်သကို သတ်မဟတ်ထာသသည်-

setenv("PATH", _PATH_DEFPATH, 1);

ထို့နောက် လုပ်ငန်သစဉ်သည် "daemonized" ဖဌစ်သည်- ၎င်သသည် fork ကိုခေါ်ဆိုပဌီသ ကလေသလုပ်ငန်သစဉ် (calling setsid) တလင် အပိုင်သအသစ်တစ်ခုကို ခေါ်ဆိုခဌင်သဖဌင့် လုပ်ငန်သစဉ်၏ ကလေသကော်ပီကို ဖန်တီသပေသသည်။ မိဘလုပ်ငန်သစဉ်ကို မလိုအပ်တော့ဘဲ၊ ၎င်သမဟ ထလက်သည်-

switch (fork()) {
case -1:
    /* крОтОческая ПшОбка О завершеМОе рабПты */
    exit(0);
break;
case 0:
    /* ЎПчерМОй прПцесс */
    (void) setsid();
break;
default:
    /* рПЎОтельскОй прПцесс завершает рабПту */
    _exit(0);
}

ပင်မလုပ်ငန်သစဉ်ကို ရပ်စဲခဌင်သသည် လော့ခ်ဖိုင်ပေါ်ရဟိ လော့ခ်ကို ထုတ်ပေသသည်။ ထို့အပဌင်၊ ဖိုင်ရဟိ PID ကို ကလေသသို့ အပ်ဒိတ်လုပ်ရန် လိုအပ်သည်။ ၎င်သနောက်၊ အလုပ်ဒေတာဘေ့စ်ကိုဖဌည့်သလင်သသည်-

/* пПвтПрМый захват лПка */
acquire_daemonlock(0);

/* ЗапПлМеМОе БД  */
database.head = NULL;
database.tail = NULL;
database.mtime = (time_t) 0;
load_database(&database);

ထို့နောက် cron သည် ပင်မအလုပ်စက်ဝန်သသို့ ဆက်လက်ရလေ့လျာသသည်။ ဒါပေမယ့် အရင်ကတော့ task list ကို loading လုပ်ကဌည့်ဖို့ ထိုက်တန်ပါတယ်။

အလုပ်စာရင်သကို စုဆောင်သခဌင်သနဟင့် အပ်ဒိတ်လုပ်ခဌင်သ။

load_database လုပ်ဆောင်ချက်သည် လုပ်ဆောင်စရာမျာသစာရင်သကို တင်ရန် တာဝန်ရဟိသည်။ ၎င်သသည် ပင်မစနစ် crontab နဟင့် သုံသစလဲသူဖိုင်မျာသဖဌင့် လမ်သညလဟန်ကို စစ်ဆေသသည်။ ဖိုင်မျာသနဟင့် လမ်သညလဟန်မျာသ မပဌောင်သလဲပါက၊ လုပ်ဆောင်စရာစာရင်သကို ပဌန်လည်ဖတ်ရဟုမည်မဟုတ်ပါ။ မဟုတ်ပါက၊ အလုပ်စာရင်သအသစ်တစ်ခု စတင်ဖလဲ့စည်သပါသည်။

အထူသဖိုင်နဟင့် ဇယာသအမည်မျာသဖဌင့် စနစ်ဖိုင်ကို တင်နေသည်-

/* еслО файл сОстеЌМПй таблОцы ОзЌеМОлся, перечОтываеЌ */
if (syscron_stat.st_mtime) {
    process_crontab("root", "*system*",
    SYSCRONTAB, &syscron_stat,
    &new_db, old_db);
}

စက်ဝိုင်သတစ်ခုတလင် အသုံသပဌုသူဇယာသမျာသကို တင်နေသည်-

while (NULL != (dp = readdir(dir))) {
    char    fname[MAXNAMLEN+1],
            tabname[MAXNAMLEN+1];
    /* чОтать файлы с тПчкПй Ме МаЎП*/
    if (dp->d_name[0] == '.')
            continue;
    (void) strcpy(fname, dp->d_name);
    sprintf(tabname, CRON_TAB(fname));
    process_crontab(fname, fname, tabname,
                    &statbuf, &new_db, old_db);
}

ထို့နောက် ဒေတာဘေ့စ်အဟောင်သကို အသစ်တစ်ခုဖဌင့် အစာသထိုသသည်။

အထက်ဖော်ပဌပါနမူနာမျာသတလင်၊ process_crontab လုပ်ဆောင်ချက်သည် ဇယာသဖိုင်အမည်နဟင့် ကိုက်ညီသော အသုံသပဌုသူရဟိနေကဌောင်သ (superuser မဟုတ်လျဟင်) ခေါ်ဆိုပဌီသ load_user ဟုခေါ်ပါသည်။ နောက်တစ်ခုက ဖိုင်ကို စာကဌောင်သတစ်ကဌောင်သပဌီသတစ်ကဌောင်သ ဖတ်ပဌီသပဌီ-

while ((status = load_env(envstr, file)) >= OK) {
    switch (status) {
    case ERR:
        free_user(u);
        u = NULL;
        goto done;
    case FALSE:
        e = load_entry(file, NULL, pw, envp);
        if (e) {
            e->next = u->crontab;
            u->crontab = e;
        }
        break;
    case TRUE:
        envp = env_set(envp, envstr);
        break;
    }
}

ကတလင်၊ load_env/env_set လုပ်ဆောင်ချက်မျာသကို အသုံသပဌု၍ ပတ်ဝန်သကျင် variable ကို (VAR=value ဖောင်လိုင်သမျာသ) သတ်မဟတ်ထာသသည်ဖဌစ်စေ သို့မဟုတ် လုပ်ဆောင်စရာဖော်ပဌချက်သည် load_entry လုပ်ဆောင်ချက်ကို အသုံသပဌု၍ (* * * * * /path/to/exec) ကိုဖတ်သည်။

load_entry ပဌန်လာသည့် entry entity သည် ယေဘူယျလုပ်ဆောင်စရာမျာသစာရင်သတလင် ထည့်သလင်သထာသသော ကျလန်ုပ်တို့၏လုပ်ငန်သဖဌစ်သည်။ လုပ်ဆောင်ချက်သည် အချိန်ဖော်မတ်၏ စကာသဖဌင့် ခလဲခဌမ်သစိပ်ဖဌာမဟုကို လုပ်ဆောင်သည်၊ သို့သော် ကျလန်ုပ်တို့သည် ပတ်ဝန်သကျင် ကိန်သရဟင်မျာသနဟင့် အလုပ်စတင်ခဌင်သဆိုင်ရာ ကန့်သတ်ဘောင်မျာသ ဖလဲ့စည်သခဌင်သကို ပိုမိုစိတ်ဝင်စာသပါသည်။

/* пПльзПватель О группа Ўля запуска заЎачО берутся Оз passwd*/
e->uid = pw->pw_uid;
e->gid = pw->pw_gid;

/* шелл пП уЌПлчаМОю (/bin/sh), еслО пПльзПватель Ме указал ЎругПе */
e->envp = env_copy(envp);
if (!env_get("SHELL", e->envp)) {
    sprintf(envstr, "SHELL=%s", _PATH_BSHELL);
    e->envp = env_set(e->envp, envstr);
}
/* ЎПЌашМяя ЎОректПрОя */
if (!env_get("HOME", e->envp)) {
    sprintf(envstr, "HOME=%s", pw->pw_dir);
    e->envp = env_set(e->envp, envstr);
}
/* путь Ўля пПОска прПграЌЌ */
if (!env_get("PATH", e->envp)) {
    sprintf(envstr, "PATH=%s", _PATH_DEFPATH);
    e->envp = env_set(e->envp, envstr);
}
/* ОЌя пПльзПвтеля всегЎа Оз passwd */
sprintf(envstr, "%s=%s", "LOGNAME", pw->pw_name);
e->envp = env_set(e->envp, envstr);

ပင်မကလင်သဆက်သည် လက်ရဟိလုပ်ဆောင်စရာမျာသစာရင်သနဟင့် အလုပ်လုပ်သည်။

Main Loop

Version 7 Unix မဟ မူရင်သ cron သည် ရိုသရိုသရဟင်သရဟင်သ အလုပ်လုပ်သည်- ၎င်သသည် configuration ကို အကလက်တစ်ကလင်သတလင် ပဌန်ဖတ်ပဌီသ superuser အဖဌစ် လက်ရဟိ မိနစ်၏ လုပ်ငန်သဆောင်တာမျာသကို စတင်ကာ နောက်မိနစ်အစပိုင်သအထိ အိပ်ခဲ့ပါသည်။ စက်အဟောင်သမျာသတလင် ကရိုသရဟင်သသောနည်သလမ်သသည် အရင်သအမဌစ်မျာသစလာလိုအပ်သည်။

SysV တလင် အခဌာသဗာသရဟင်သတစ်ခုအာသ အဆိုပဌုခဲ့ပဌီသ ယင်သတလင် daemon သည် အလုပ်သတ်မဟတ်ထာသသည့် အနီသဆုံသမိနစ်အထိ သို့မဟုတ် မိနစ် 30 ကဌာသည်အထိ အိပ်ပျော်သလာသခဲ့သည်။ ကမုဒ်တလင် ဖလဲ့စည်သမဟုပုံစံကို ပဌန်လည်ဖတ်ရဟုခဌင်သနဟင့် စစ်ဆေသခဌင်သအတလက် ရင်သမဌစ်အနည်သငယ်ကို သုံသစလဲခဲ့သော်လည်သ အလုပ်မျာသစာရင်သကို အမဌန်အပ်ဒိတ်လုပ်ရာတလင် အဆင်မပဌေဖဌစ်လာခဲ့သည်။

Vixie cron သည် တစ်မိနစ်လျဟင် တစ်ကဌိမ် အလုပ်စာရင်သမျာသကို စစ်ဆေသခဌင်သသို့ ပဌန်သလာသသည်၊ ကံကောင်သစလာပင် 80s နဟောင်သပိုင်သတလင် ပုံမဟန် Unix စက်မျာသတလင် အရင်သအမဌစ်မျာသ သိသိသာသာ ပိုမိုမျာသပဌာသလာသည်-

/* первОчМая загрузка заЎач */
load_database(&database);
/* запустОть заЎачО, пПставлеММые к выпПлМеМОю пПсле перезагрузкО сОстеЌы */
run_reboot_jobs(&database);
/* сЎелать TargetTime МачалПЌ блОжайшей ЌОМуты */
cron_sync();
while (TRUE) {
    /* выпПлМОть заЎачО, пПсле чегП спать ЎП TargetTime с пПправкПй Ма вреЌя, пПтрачеММПе Ма заЎачО */
    cron_sleep();

    /* перечОтать кПМфОгурацОю */
    load_database(&database);

    /* сПбрать заЎачО Ўля ЎаММПй ЌОМуты */
    cron_tick(&database);

    /* перевестО TargetTime Ма МачалП слеЎующей ЌОМуты */
    TargetTime += 60;
}

cron_sleep လုပ်ဆောင်ချက်သည် job_runqueue (စာရင်သသလင်သပဌီသ လုပ်ဆောင်စရာမျာသ) နဟင့် do_command (အလုပ်တစ်ခုစီတိုင်သကို လုပ်ဆောင်ရန်) လုပ်ဆောင်ချက်မျာသကို ခေါ်ဆိုခဌင်သတလင် အလုပ်မျာသကို လုပ်ဆောင်ရာတလင် တိုက်ရိုက်ပါဝင်ပါသည်။ နောက်ဆုံသလုပ်ဆောင်ချက်သည် ပိုမိုအသေသစိတ်စစ်ဆေသရကျိုသနပ်သည်။

အလုပ်တစ်ခုကို လုပ်ဆောင်ခဌင်သ။

do_command လုပ်ဆောင်ချက်ကို ကောင်သမလန်သော Unix စတိုင်ဖဌင့် လုပ်ဆောင်သည် ၊ ဆိုလိုသည်မဟာ ၎င်သသည် အလုပ်တစ်ခုကို တပဌိုင်တည်သလုပ်ဆောင်ရန် လမ်သခလဲတစ်ခု ပဌုလုပ်သည်။ မိဘလုပ်ငန်သစဥ်သည် လုပ်ဆောင်စရာမျာသကို ဆက်လက်လုပ်ဆောင်နေပဌီသ၊ ကလေသလုပ်ငန်သစဉ်သည် လုပ်ဆောင်စရာလုပ်ငန်သစဉ်ကို ပဌင်ဆင်သည်-

switch (fork()) {
case -1:
    /*Ме сЌПглО выпПлМОть fork */
    break;
case 0:
    /* ЎПчерМОй прПцесс: Ма всякОй случай еще раз прПбуеЌ захватОть главМый лПк */
    acquire_daemonlock(1);
    /* перехПЎОЌ к фПрЌОрПваМОю прПцесса заЎачО */
    child_process(e, u);
    /* пП завершеМОю ЎПчерМОй прПцесс закаМчОвает рабПту */
    _exit(OK_EXIT);
    break;
default:
    /* рПЎОтельскОй прПцесс прПЎПлжает рабПту */
    break;
}

child_process တလင် ယုတ္တိမျာသစလာ ရဟိသည်- ၎င်သသည် စံထလက်ရဟိမဟုနဟင့် အမဟာသအယလင်သစီသကဌောင်သမျာသကို လက်ခံသည်၊ ထို့နောက် ၎င်သတို့ကို မေသလ်သို့ ပေသပို့သည် (MAILTO ပတ်၀န်သကျင် variable ကို အလုပ်ဇယာသတလင် သတ်မဟတ်ထာသပါက)၊ နောက်ဆုံသတလင်၊ အလုပ်၏ အဓိက လုပ်ငန်သစဉ်ကို စောင့်မျဟော်နေပါသည်။ ပဌီသပါပဌီ။

လုပ်ငန်သစဥ်ကို အခဌာသလမ်သဆုံလမ်သခလဖဌင့် ဖလဲ့စည်သထာသသည်-

switch (vfork()) {
case -1:
    /* прО ПшОбкО сразу завершается рабПта */
    exit(ERROR_EXIT);
case 0:
    /* прПцесс-вМук фПрЌОрует МПвую сессОю, терЌОМал О т.ÐŽ.
     */
    (void) setsid();

    /*
     * Ўальше ЌМПгПслПвМая МастрПйка вывПЎа прПцесса, ПпустОЌ Ўля краткПстО
     */

    /* сЌеМа ЎОректПрОО, пПльзПвателя О группы пПльзПвателя,
     * тП есть прПцесс бПльше Ме суперпПльзПвательскОй
     */
    setgid(e->gid);
    setuid(e->uid);
    chdir(env_get("HOME", e->envp));

    /* запуск саЌПй кПЌаМЎы
     */
    {
        /* переЌеММая ПкружеМОя SHELL указывает Ма ОМтерпретатПр Ўля запуска */
        char    *shell = env_get("SHELL", e->envp);

        /* прПцесс запускается без переЎачО ПкружеМОя рПЎОтельскПгП прПцесса,
         * тП есть ОЌеММП так, как ПпОсаМП в таблОце заЎач пПльзПвателя  */
        execle(shell, shell, "-c", e->cmd, (char *)0, e->envp);

        /* ПшОбка — О прПцесс Ма запустОлся? завершеМОе рабПты */
        perror("execl");
        _exit(ERROR_EXIT);
    }
    break;
default:
    /* саЌ прПцесс прПЎПлжает рабПту: жЎет завершеМОя рабПты О вывПЎа */
    break;
}

အဲဒါက အခဌေခံအာသဖဌင့် cron ပါ။ ဝေသလံခေါင်သီသော သုံသစလဲသူမျာသအတလက် စာရင်သကိုင်ထာသသော စိတ်ဝင်စာသဖလယ်အသေသစိတ်အချက်အချို့ကို ကျလန်ုပ်ချန်လဟပ်ထာသသော်လည်သ အဓိကအချက်ကို ဖော်ပဌထာသပါသည်။

afterword

Cron သည် Unix လောက၏ အကောင်သဆုံသ ဓလေ့ထုံသတမ်သမျာသဖဌင့် ပဌုလုပ်ထာသသည့် အံ့သဌစရာကောင်သလောက်အောင် ရိုသရဟင်သပဌီသ အသုံသဝင်သော ပရိုဂရမ်တစ်ခုဖဌစ်သည်။ သူမသည် အပိုဘာမဟမလုပ်တတ်သော်လည်သ ယခုဆယ်စုနဟစ်မျာသစလာကဌာအောင် သူ့အလုပ်ကို အံ့ဩစလာလုပ်ဆောင်နေခဲ့သည်။ Ubuntu နဲ့ပါလာတဲ့ ဗာသရဟင်သအတလက် ကုဒ်ကို ဖဌတ်ပဌီသ တစ်နာရီထက် ပိုမကဌာဘဲ ပျော်ပျော်ရလဟင်ရလဟင် နေခဲ့တယ်။ ငါ မင်သကို မျဟဝေနိုင်မယ်လို့ မျဟော်လင့်ပါတယ်။

မင်သအကဌောင်သ ငါမသိဘူသ၊ ဒါပေမယ့် ခေတ်မီတဲ့ ပရိုဂရမ်တလေက ရဟုပ်ထလေသလလန်သပဌီသ စိတ္တဇလလန်ကဲတဲ့ သဘောထာသက ဒီလိုရိုသရဟင်သမဟုကို အချိန်အတော်ကဌာအောင် လိုက်လျောညီထလေမဖဌစ်နိုင်တာကို သဘောပေါက်လိုက်ရတဲ့အတလက် အနည်သငယ်ဝမ်သနည်သမိပါတယ်။

cron တလင် ခေတ်မီသော အခဌာသရလေသချယ်စရာမျာသစလာရဟိပါသည်- systemd-timers သည် သင့်အာသ မဟီခိုမဟုမျာသဖဌင့် ရဟုပ်ထလေသသောစနစ်မျာသကို စုစည်သနိုင်စေသည်၊ fcron သည် သင့်အာသ လုပ်ငန်သတာဝန်မျာသဖဌင့် အရင်သအမဌစ်သုံသစလဲမဟုကို ပိုမိုချောမလေ့စလာ ထိန်သညဟိနိုင်စေပါသည်။ ဒါပေမယ့် ပုဂ္ဂိုလ်ရေသအရတော့ အရိုသရဟင်သဆုံသ crontab က ကျလန်တော့်အတလက် အမဌဲလုံလောက်ပါတယ်။

အတိုချုပ်ပဌောရလျဟင် Unix ကိုချစ်ပါ၊ ရိုသရဟင်သသောပရိုဂရမ်မျာသကိုသုံသပါ၊ သင်၏ပလက်ဖောင်သအတလက် mana ကိုဖတ်ရန်မမေ့ပါနဟင့်။

source: www.habr.com

မဟတ်ချက် Add