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।
মন্তব্য
এখনো কোনো মন্তব্য নেই। প্রথম হোন।