−25%

በWindows ዓመታዊ ክፍያ ላይ፣ እስከ ኦክቶበር 31። ዕቅዶችን ይመልከቱ

EQVPS
ጀምር

በ Windows Server ላይ ስክሪፕት 24/7 እንዴት እንደሚሠራ፦ መውጫን፣ ብልሽትን እና እንደገና ማስጀመርን ይቋቋማል

በ Windows Server 2022 VPS ላይ ቦትን ወይም ስክሪፕትን በ Task Scheduler ብቻ ቀን ከሌሊት ያስሂዱ፦ ማንም ሳይገባ በማስነሻ ይጀምራል፣ ከብልሽት በኋላ በአንድ ደቂቃ ውስጥ ይመለሳል፣ ሁለት ቅጂዎች በጭራሽ አይሄዱም። ለማረጋገጥ ሂደቱን አቋርጠን ሰርቨሩን እንደገና አስጀምረናል።

በ 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'

እያንዳንዱ ክፍል የሚያደርገው፦

  • -AtStartup Windows ሲነሳ፣ የገባ ተጠቃሚ ሳይኖር ቦቱን ያስጀምራል።
  • የየደቂቃው ድግግሞሽ ሥራውን በየደቂቃው እንደገና ያስሄዳል። ቦቱ በሕይወት ካለ ምንም አይከሰትም፤ ከሞተ እንደገና ይጀምራል።
  • -MultipleInstances IgnoreNew ድግግሞሹን ደህንነቱ የተጠበቀ ያደርገዋል፦ ቦቱ አስቀድሞ እየሄደ ያገኘ ማስሄድ ይዘለላል።
  • -ExecutionTimeLimit 0 Task 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 ሰከንድ በኋላ ቦቱ በምዝግቡ ውስጥ እየጻፈ ነበር፤ በሰርቨሩ ላይ ምንም የተጠቃሚ ክፍለ-ጊዜ ሳይኖር።

ያልሠራው። ሁለት ነገሮች ትክክል ይመስላሉ ግን አይደሉም፦

  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 ማህደረ ትውስታ ይይዛል። 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።

FAQ

ስክሪፕቱን በራሴ የ 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 መለያ እንዲያገኘው ተርጓሚውን ለሁሉም ተጠቃሚዎች ይጫኑት።

አስተያየቶች

እስካሁን አስተያየቶች የሉም። መጀመሪያ ይሁኑ።

አስተያየት ይተዉ

አስተያየቶች ከመታየታቸው በፊት ይጣራሉ።