−25%

د Windows پر کلنۍ تادیه، تر ۳۱ اکتوبر. پلانونه وګورئ

EQVPS
پیل وکړئ

په Windows Server کې سکریپټ 24/7 څنګه وچلوو: له وتلو، کرش او بیا پیل څخه ژغورل کېږي

په Windows Server 2022 VPS کې بوټ یا سکریپټ یوازې د Task Scheduler په مرسته شپه او ورځ وچلوئ: پرته له دې چې څوک ننوځي د بوټ پر مهال پیلېږي، له کرش وروسته په یوه دقیقه کې بېرته راځي، او هېڅکله دوه کاپي نه چلېږي. د ازموینې لپاره موږ پروسه ووژله او سرور مو بیا پیل کړ.

په Windows VPS کې د بوټ چلولو عادي لاره دا ده چې په RDP ناسته کې یې پیل کړئ او کړکۍ وتړئ. دا تر هغه کار کوي چې یو تازه کول د شپې په 3 بجو سرور بیا پیل کړي او څوک یې بیا پیل نه کړي. Task Scheduler چې په هر Windows Server کې شته، دا ستونزه پرته له اضافي سافټویر حل کوي. لاندې تنظیم:

  • سکریپټ د بوټ پر مهال، مخکې له دې چې څوک ننوځي پیلوي؛
  • که کرش شي یا ووژل شي، په یوه دقیقه کې یې بیا پیلوي؛
  • هېڅکله دوه کاپي یوځای نه چلوي.

دا درې واړه موږ زموږ په Windows Server 2022 انځور کې ازمویلي: پروسه مو ووژله، سرور مو بیا پیل کړ او کاپي مو وشمېرلې.

د بېلګې سکریپټ

ستاسو د بوټ ځای ناستی: هر 10 ثانیې یوه کرښه لیکي، نو اسانه ښکاري چې ژوندی دی که نه.

New-Item -ItemType Directory -Force C:\bots | Out-Null
Set-Content C:\bots\heartbeat.ps1 -Encoding ascii -Value @'
while ($true) {
    Add-Content -Path C:\bots\heartbeat.log -Value ("{0:u} pid {1}" -f (Get-Date), $PID)
    Start-Sleep -Seconds 10
}
'@

دنده ثبت کړئ

د مدیر په PowerShell کې یې وچلوئ:

$action   = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-NoProfile -ExecutionPolicy Bypass -File C:\bots\heartbeat.ps1' -WorkingDirectory 'C:\bots'
$atBoot   = New-ScheduledTaskTrigger -AtStartup
$everyMin = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 1)
$settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit ([TimeSpan]::Zero) -MultipleInstances IgnoreNew -StartWhenAvailable
Register-ScheduledTask -TaskName 'mybot' -Action $action -Trigger $atBoot, $everyMin -Settings $settings -User 'SYSTEM' -RunLevel Highest
Start-ScheduledTask -TaskName 'mybot'

هره برخه څه کوي:

  • -AtStartup د Windows د بوټ پر مهال بوټ پیلوي، پرته له ننوتلي کارن.
  • هره دقیقه تکرار دنده هره دقیقه بیا چلوي. که بوټ ژوندی وي، هېڅ نه کېږي؛ که مړ شوی وي، بیا پیلېږي.
  • -MultipleInstances IgnoreNew تکرار خوندي کوي: هغه چلول چې بوټ لا دمخه روان ومومي، پرېښودل کېږي.
  • -ExecutionTimeLimit 0 د 72 ساعتونو ډیفالټ حد لرې کوي، چې له هغه وروسته به Task Scheduler بوټ دراوه.
  • -User 'SYSTEM' یې پرته له پاسورډ او ناستې چلوي. SYSTEM په سرور بشپړ واک لري، نو په دې ډول یوازې خپل کوډ وچلوئ.

د Python لپاره عمل بدل کړئ:

$action = New-ScheduledTaskAction -Execute 'C:\Program Files\Python312\python.exe' -Argument 'C:\bots\bot.py' -WorkingDirectory 'C:\bots'

موږ څه وازمویل

کرش. موږ د بوټ پروسه د Stop-Process -Force په مرسته ووژله. 46 ثانیې وروسته د هرې دقیقې محرک نوې پیل کړې وه، او دقیقاً یوه کاپي وه.

بیا پیل. موږ سرور بیا پیل کړ او ننوتلي نه وو. له بوټ 40 ثانیې وروسته بوټ په خپل لاګ کې لیکل کول، پرته له دې چې په سرور کې د کارن ناسته وي.

څه کار ونه کړ. دوه شیان سم ښکاري خو نه دي:

  1. "که دنده ناکامه شي، هر … بیا یې پیل کړه". فعال مو کړ، پروسه مو ووژله، او دنده څو دقیقې په Ready حالت کې پاتې شوه. دا هغې دندې ته غبرګون ښیي چې پیل نشي، نه هغه پروګرام ته چې وروسته مړ شي.
  2. پوښونکی لوپ (while ($true) { & bot; sleep 5 }). کرش شوی بوټ بیا پیلوي، خو که پخپله پوښونکی مړ شي، ماشومه پروسه روانه وي او راتلونکی چلول دویم بوټ پیلوي. موږ په پای کې دوه کاپي درلودې، چې د Telegram بوټ لپاره یعنې دوه پروسې چې پر هماغو تازه کولو جګړه کوي.

څنګه یې وګورو

Get-ScheduledTask -TaskName mybot | Select-Object TaskName, State
Get-ScheduledTaskInfo -TaskName mybot | Select-Object LastRunTime, NextRunTime
Get-Content C:\bots\heartbeat.log -Tail 5

د ساتنې لپاره د درولو لپاره لومړی Disable-ScheduledTask mybot وچلوئ (که نه د هرې دقیقې محرک به یې بیا پیل کړي)، بیا پروسه ودروئ. Enable-ScheduledTask mybot یې بېرته راولي.

لاګونه

دنده وتونکي نه نیسي. بوټ ته اجازه ورکړئ چې خپل لاګ پخپله ولیکي، لکه بېلګه، یا په یوه کوچني .cmd پیلوونکي کې وتونکی بلې خوا ته واستوئ او -Execute هغه فایل ته وګرځوئ.

کوم پلان

د PowerShell یا Python بوټ لږ CPU کاروي، خو پخپله Windows زموږ په انځور کې په خالي حالت کې له 1 تر 1.3 GB حافظه نیسي. Windows-Small (4 vCPU، 4 GB حافظه، 50 GB، میاشتنی $11) د یوه یا دوو بوټونو لپاره سم اندازه ده. په NAT پلان کې وتونکي اتصالونه (Telegram، د تبادلو API، هغه webhooks چې تاسو یې غواړئ) عادي کار کوي. که بوټ باید webhooks یا نورې راتلونکې ترافیک ترلاسه کړي، Windows Small-IP (میاشتنی $28) له خپل IPv4 سره واخلئ.

راتلونکي ګامونه: RDP خوندي کړئ، او که غواړئ بوټ د SSH له لارې اداره کړئ، OpenSSH نصب کړئ. تادیه په USDT، USDC یا ETH کېږي، او Windows ستاسو د خپل جواز سره Server 2022 دی (BYOL). ټول پلانونه: Windows VPS.

پوښتنې

ولې سکریپټ په خپله RDP ناسته کې نه پرېږدم؟

دا تر هغه کار کوي چې یو څه ناسته پای ته ورسوي: وتل، له تازه کولو وروسته بیا پیل یا کرش. د RDP کړکۍ تړل (پرې کول) ناسته ژوندۍ ساتي، خو له حساب وتل په هغې کې هر څه بندوي، او له بیا پیل وروسته څوک ننوتلی نه وي چې سکریپټ بیا پیل کړي. مهالویش شوې دنده په هېڅ ناسته پورې تړلې نه ده.

ایا Task Scheduler د 'د ناکامۍ پر مهال بیا پیل' تنظیم نه لري؟

لري، خو زموږ په ازموینه کې یې مرسته ونه کړه. کله چې مو د سکریپټ پروسه ووژله، دنده 'Ready' حالت ته لاړه او همدلته پاتې شوه. دا تنظیم هغه وخت غبرګون ښیي چې دنده پیل نشي، نه هغه وخت چې ستاسو پروګرام وروسته ودرېږي. هغه څه چې بېرته یې راولي د دې لارښود تکراري محرک دی.

ایا زما د بوټ دوه کاپي یوځای چلېدلی شي؟

له دې تنظیم سره نه. دنده پخپله بوټ چلوي (پرته له پوښونکي سکریپټ) او MultipleInstances IgnoreNew کاروي، نو تر څو چې بوټ ژوندی وي، د هرې دقیقې محرک هېڅ نه کوي. دوه ګونې کاپي همدا پوښونکی لوپ جوړوي: پوښونکی ووژنئ، د هغه ماشومه پروسه روانه وي، او نوی پوښونکی بله پیلوي. موږ همدا څه ولیدل.

ایا دا د Python یا Node.js لپاره کار کوي؟

هو. تفسیرونکی په -Execute او سکریپټ په -Argument کې له بشپړو لارو سره ولیکئ، لکه -Execute 'C:\Program Files\Python312\python.exe' -Argument 'C:\bots\bot.py'. تفسیرونکی د ټولو کارنانو لپاره نصب کړئ چې SYSTEM حساب یې پیدا کړي.

تبصرې

لا تبصرې نشته. لومړی اوسئ.

یوه تبصره پریږدئ

تبصرې د ښکاره کیدو مخکې اعتدال کیږي.