በ Windows VPS ላይ ቦት ለማስሄድ የተለመደው መንገድ በ RDP ክፍለ-ጊዜ ውስጥ ማስጀመር እና መስኮቱን መዝጋት ነው። ይህ አንድ ዝማኔ ከሌሊቱ 9 ሰዓት ሰርቨሩን እንደገና እስኪያስጀምር እና ማንም ቦቱን እንደገና እስካላስጀመረ ድረስ ይሠራል። በሁሉም 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 0Task Scheduler ቦቱን የሚያቆምበትን የ 72 ሰዓት ነባሪ ገደብ ያስወግዳል።-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 ማህደረ ትውስታ ይይዛል። Windows-Small (4 vCPU፣ 4 GB ማህደረ ትውስታ፣ 50 GB፣ በወር $11) ለአንድ ወይም ለሁለት ቦቶች ትክክለኛ መጠን ነው። በ NAT እቅድ ላይ የወጪ ግንኙነቶች (Telegram፣ የልውውጥ API፣ የሚጠሯቸው webhooks) እንደተለመደው ይሠራሉ። ቦቱ webhooks ወይም ሌላ ገቢ ትራፊክ መቀበል ካለበት የራሱ IPv4 ያለውን Windows Small-IP (በወር $28) ይምረጡ።
ቀጣይ እርምጃዎች፦ RDPን ይጠብቁ፤ ቦቱን በ SSH ማስተዳደር ከመረጡ ደግሞ OpenSSHን ይጫኑ። ክፍያ በ USDT፣ USDC ወይም ETH ነው፤ Windows ደግሞ በራስዎ ፈቃድ የሚሠራ Server 2022 ነው (BYOL)። ሁሉም እቅዶች፦ Windows VPS።
አስተያየቶች
እስካሁን አስተያየቶች የሉም። መጀመሪያ ይሁኑ።