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।
टिप्पणियाँ
अभी तक कोई टिप्पणी नहीं। पहले बनें।