Daemons သို့မဟုတ် Task Quunge Ways ကဲ့သို့သော PHP scripts များပြုလုပ်ရန်လိုအပ်သည့် PHP scripts များကိုတီထွင်သည့် PHP scripts များကိုတီထွင်သောအခါ Ctrl + C ကဲ့သို့သော sigts ကဲ့သို့သော sigts ကိုဖြတ်တောက်ရန်အထူးသဖြင့်တုန့်ပြန်ရန်အထူးအရေးကြီးသည်။ ဤဆောင်းပါးသည် PCNTL_Signal နှင့် Time_Nanosleep ကိုကြော့ရှင်းစွာကိုင်တွယ်နိုင်ကြောင်းနှင့်ကြော့ရှင်းစွာကိုင်တွယ်နိုင်ကြောင်းကိုမိတ်ဆက်ပေးနိုင်သည်။ ထို့ကြောင့်သင်၏ scription သည်လုံခြုံစွာ,
PCNTL_Signal ဆိုသည်မှာ PHP မှပေးသောလုပ်ငန်းစဉ်ထိန်းချုပ်မှုလုပ်ငန်းတစ်ခုဖြစ်ပြီး Sigint , Sigterm ကဲ့သို့သော posix အချက်ပြမှုများကိုတုန့်ပြန်ရန်အချက်ပြ processing function ကိုမှတ်ပုံတင်ရန်ခွင့်ပြုသည်။ ၎င်းကို CLI scripts များတွင်အသုံးပြုသည်။
Time_nanosleep သည် အိပ်စက်ခြင်း ထက်ပိုမိုကောင်းမွန်သောနှောင့်နှေးခြင်းလုပ်ငန်းဖြစ်သည်။ မကြာခဏဆိုသလိုမဲဆန္ဒရှင်များလိုအပ်သည့်ဖြစ်ရပ်များတွင် အိပ်စက်ခြင်း ထက်ပိုမိုလွယ်ကူနေစဉ်အတွင်းပိုမိုလွယ်ကူစွာစောင့်ဆိုင်းနေသည့်ကောင်းမွန်သောစောင့်ဆိုင်းမှုဆိုင်ရာယုတ္တိဗေဒကိုအကောင်အထည်ဖော်ရန်ခွင့်ပြုသည်။
CLI script တွင် အိပ်စက်ခြင်း နှင့်အတူပြ a နာတစ်ခုရှိသည် - အကယ်. လုပ်ငန်းစဉ်သည် အိပ်နေ ပါက အိပ်စက်ခြင်း ပြီးဆုံးသည်အထိအချက်ပြမှုသည်ချက်ချင်းအကျိုးသက်ရောက်မည်မဟုတ်ပါ။ Time_Nanosleep ကိုအသုံးပြုပြီးအချိန်တိုအတွင်းအိပ်စက်ခြင်းဖြင့်ဤပြ problem နာကိုရှောင်ရှားနိုင်သည်။ PCNTL_Signal_DISPATHTATE နှင့် တွဲဖက်. အိပ်စက်ခြင်းတစ်ခုချင်းစီအကြားရှိ signal တစ်ခုရှိ, မရှိစစ်ဆေးနိုင်သည်။
PCNTL_SIGNATIST ကို TIME_NANOSTLEEP ကို အသုံးပြု. PCNTL_SIMAGNAL ကို အသုံးပြု. PHP SPORT SPORE ဆိုသည်မှာ TIME_NANOSTESSESS ကိုဖြတ်တောက်ရန်:
<?php
declare(ticks = 1);
$running = true;
// စာရင်း SIGINT နှင့် SIGTERM signal processor
pcntl_signal(SIGINT, function($signo) use (&$running) {
echo "ခံယူ SIGINT အလံပြချက်,ထွက်ရန်ပြင်ဆင်ပါ...\n";
$running = false;
});
pcntl_signal(SIGTERM, function($signo) use (&$running) {
echo "ခံယူ SIGTERM အလံပြချက်,ထွက်ရန်ပြင်ဆင်ပါ...\n";
$running = false;
});
// Task Execute Loop Simulate
while ($running) {
echo "အလုပ်များအပေါ်အလုပ်လုပ်...\n";
// အပြောင်းအလဲနဲ့လုပ်ငန်းစဉ်ဆက်ဖြစ်နေသည်ဟုယူဆ 3 စက်ဏန့်,ဒါပေမယ့်တိုင်း 0.1 စက်ဏန့်检查一次အလံပြချက်
$totalSleepSeconds = 3;
$intervalMicro = 100000000; // 0.1 စက်ဏန့် = 100,000,000 纳စက်ဏန့်
$iterations = $totalSleepSeconds * 10;
for ($i = 0; $i < $iterations; $i++) {
if (!$running) {
break;
}
// အချိန်တိုင်း sleep 0.1 စက်ဏန့်,期间检查အလံပြချက်
time_nanosleep(0, $intervalMicro);
pcntl_signal_dispatch(); // 显式检查是否有အလံပြချက်到达
}
}
// အရင်းအမြစ်များကိုသန့်ရှင်းရေး
echo "အရင်းအမြစ်များကိုသန့်ရှင်းရေး,အစီအစဉ်မှထွက်ပါ。\n";
// နမူနာ:ဆက်သွယ်မှုကိုပိတ်ပါ、သငေ်္ဘာအသွားစာတမ်း、Lock ကိုလွှတ်လိုက်ပါ။
// ဥပမာအားဖြင့်, ဝေးလံခေါင်သီဆက်သွယ်မှုကိုပိတ်ပါ
$endpoint = "https://gitbox.net/api/close";
echo "အနီးကပ်အသိပေးချက်ကိုပေးပို့ပါ $endpoint\n";
// file_get_contents($endpoint); // အမှန်တကယ်အသုံးပြုသောအခါဖွင့်လှစ်နိုင်ပါသည်
ကြေငြာခြင်း (ticks = 1) သည် signal processor ကိုတစ်ခုချင်းစီကို Execalable ထုတ်ပြန်ချက်တစ်ခုအပြီးတစ်ကြိမ်ခေါ်ဆိုပါလိမ့်မည် ။
ရေရှည်အလုပ်ကိုတိုတောင်းသောအိပ်စက်ခြင်းများကိုချိုးဖောက်ခြင်းအားဖြင့်ကြားဖြတ်အချက်ပြမှုများကိုပိုမိုအချိန်မီတုံ့ပြန်နိုင်သည်။
အဓိကကွင်းဆက်သည်ယိုစိမ့်မှုသို့မဟုတ်ပြည်နယ်များကျန်ရှိနေသေးသည်ကိုသေချာစေရန်အတွက်သန့်ရှင်းသောအရင်းအမြစ်များကိုပြုပြင်ပြောင်းလဲခြင်းပြုလုပ်နိုင်သည်။
ဤလုပ်ဆောင်မှုသည်အောက်ပါအခြေအနေများတွင်အလွန်လက်တွေ့ကျသည်။
ထိုကဲ့သို့သောမက်ဆေ့ခ်ျကိုတန်းစီစားသုံးသူအဖြစ် daemon အခြေစိုက်အလုပ်များ;
ရှည်လျားသောမှတ်တမ်းစောင့်ကြည့်လေ့လာရေး scripts;
System Managemily command ကိုတုန့်ပြန်စရာမလိုအပ်သော CLI ကိရိယာများ,
ကွန်တိန်နာသို့မဟုတ် kubernetes အောက်ရှိ Elegant exit service script ။
PCNTL_Signal နှင့် PCNTL_Signal_DISWATE ကို PHP တွင် Elegal signal processing interrupt နည်းလမ်းများရရှိရန် Time_NNTL_Signal_Dispatch ဖြင့်အသုံးပြုပါ။ ၎င်းသည် script ကိုတုန့်ပြန်နိုင်ရုံသာမကသန့်ရှင်းရေးမပြုမီအရင်းအမြစ်များကိုအချည်းနှီးရပ်စဲခြင်းပြ problem နာကိုရှောင်ရှားနိုင်သည်။ ဤအလေ့အကျင့်သည်တည်ငြိမ်စွာပြေးရန်လိုအပ်သည့် CLI script ကိုမဆိုမရှိမဖြစ်လိုအပ်သည်။
script ဖွဲ့စည်းပုံကိုပိုကောင်းအောင်ပြုလုပ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည် PHP scripts ကိုခန့်မှန်းရခက်ဆုံးရပ်စဲခြင်းနှင့်ရင်ဆိုင်ရသောအခါအမှန်တကယ် backend service လုပ်ငန်းစဉ်ကဲ့သို့ပြုမူနေဆဲဖြစ်သည်။