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'
ہر حصہ کیا کرتا ہے:
-AtStartupWindows بوٹ ہونے پر بوٹ شروع کرتا ہے، کسی لاگ ان صارف کے بغیر۔- ہر منٹ دہرانا ٹاسک کو ہر منٹ دوبارہ چلاتا ہے۔ بوٹ زندہ ہو تو کچھ نہیں ہوتا؛ بند ہو گیا ہو تو پھر شروع ہوتا ہے۔
-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 سیکنڈ بعد بوٹ اپنے لاگ میں لکھ رہا تھا، جبکہ سرور پر کوئی صارف سیشن نہیں تھا۔
کیا کام نہیں آیا۔ دو چیزیں درست لگتی ہیں مگر ہیں نہیں:
- "ٹاسک ناکام ہو تو ہر … دوبارہ شروع کریں"۔ ہم نے اسے آن کیا، پروسیس بند کیا، اور ٹاسک کئی منٹ Ready حالت میں پڑا رہا۔ یہ اس ٹاسک پر ردعمل دیتا ہے جو شروع نہ ہو سکے، اس پروگرام پر نہیں جو بعد میں بند ہو۔
- ریپر لوپ (
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۔
تبصرے
ابھی کوئی تبصرہ نہیں۔ پہلے بنیں۔