−25%

Windows کی سالانہ ادائیگی پر، 31 اکتوبر تک۔ پلانز دیکھیں

EQVPS
شروع کریں

Windows Server پر اسکرپٹ 24/7 کیسے چلائیں: لاگ آف، کریش اور ری اسٹارٹ کے بعد بھی

صرف Task Scheduler سے Windows Server 2022 VPS پر بوٹ یا اسکرپٹ دن رات چلائیں: کسی کے لاگ ان کیے بغیر بوٹ پر شروع، کریش کے بعد ایک منٹ میں واپس، اور کبھی دو نقلیں نہیں۔ ہم نے پروسیس بند کر کے اور سرور ری اسٹارٹ کر کے جانچا۔

Windows VPS پر بوٹ چلانے کا عام طریقہ یہ ہے کہ اسے RDP سیشن میں شروع کر کے ونڈو بند کر دی جائے۔ یہ تب تک چلتا ہے جب تک کوئی اپ ڈیٹ رات 3 بجے سرور ری اسٹارٹ نہ کر دے اور کوئی اسے دوبارہ شروع نہ کرے۔ ہر Windows Server میں موجود Task Scheduler اسے کسی اضافی سافٹ ویئر کے بغیر حل کرتا ہے۔ نیچے کا سیٹ اپ:

  • اسکرپٹ کو بوٹ پر، کسی کے لاگ ان کرنے سے پہلے شروع کرتا ہے؛
  • کریش ہونے یا بند کیے جانے پر اسے ایک منٹ کے اندر دوبارہ شروع کرتا ہے؛
  • کبھی دو نقلیں ایک ساتھ نہیں چلاتا۔

تینوں باتیں ہم نے اپنی 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 RAM لیتا ہے۔ Windows-Small (4 vCPU، 4 GB RAM، 50 GB، $11 ماہانہ) ایک دو بوٹس کے لیے درست سائز ہے۔ NAT پلان پر باہر جانے والے کنکشن (Telegram، ایکسچینج API، آپ کے بلائے گئے ویب ہکس) معمول کے مطابق چلتے ہیں۔ اگر بوٹ کو ویب ہکس یا دوسری آنے والی ٹریفک وصول کرنی ہے تو اپنے IPv4 والا Windows Small-IP ($28 ماہانہ) لیں۔

اگلے قدم: 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 اکاؤنٹ اسے ڈھونڈ سکے۔

تبصرے

ابھی کوئی تبصرہ نہیں۔ پہلے بنیں۔

ایک تبصرہ چھوڑیں

تبصرے ظاہر ہونے سے پہلے moderate کیے جاتے ہیں۔