Njia ya kawaida ya kuendesha boti kwenye VPS ya Windows ni kuianzisha katika kipindi cha RDP na kufunga dirisha. Inafanya kazi hadi sasisho liwashe seva upya saa tisa usiku na hakuna kitu kiianzishe tena. Task Scheduler, ambayo tayari iko kwenye kila Windows Server, hutatua hili bila programu ya ziada. Usanidi hapa chini:
- huanzisha skripti wakati wa kuwasha, kabla mtu yeyote hajaingia;
- huianzisha tena ndani ya dakika moja ikianguka au ikiuawa;
- kamwe haiendeshi nakala mbili kwa wakati mmoja.
Tulijaribu yote matatu kwenye picha yetu ya Windows Server 2022: tuliua mchakato, tukawasha seva upya, na tukahesabu nakala.
Skripti ya mfano
Mbadala wa boti yako: huandika mstari kila sekunde 10, kwa hiyo ni rahisi kuona kama iko hai.
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
}
'@
Sajili kazi
Endesha katika PowerShell ya msimamizi:
$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'
Kila sehemu inafanya nini:
-AtStartuphuanzisha boti Windows inapowaka, bila mtumiaji aliyeingia.- Kurudia kwa kila dakika huendesha kazi tena kila dakika. Boti ikiwa hai, hakuna kinachotokea; ikiwa imekufa, inaanza tena.
-MultipleInstances IgnoreNewndio hufanya kurudia kuwe salama: uendeshaji unaokuta boti tayari ikifanya kazi unarukwa.-ExecutionTimeLimit 0huzima kikomo cha msingi cha saa 72, ambacho baada yake Task Scheduler ingesimamisha boti.-User 'SYSTEM'huiendesha bila nenosiri wala kipindi. SYSTEM ina haki kamili kwenye seva, kwa hiyo endesha kwa njia hii msimbo wako mwenyewe pekee.
Kwa Python, badilisha kitendo:
$action = New-ScheduledTaskAction -Execute 'C:\Program Files\Python312\python.exe' -Argument 'C:\bots\bot.py' -WorkingDirectory 'C:\bots'
Tulichokagua
Kuanguka. Tuliua mchakato wa boti kwa Stop-Process -Force. Sekunde 46 baadaye kichochezi cha dakika kilikuwa kimeanzisha mpya, na kulikuwa na nakala moja hasa.
Kuwasha upya. Tuliwasha seva upya na hatukuingia. Sekunde 40 baada ya kuwaka boti ilikuwa ikiandika kwenye kumbukumbu yake, bila vipindi vya watumiaji kwenye seva.
Kisichofanya kazi. Mambo mawili yanaonekana sahihi lakini sivyo:
- "Kazi ikishindwa, anza tena kila…" Tuliiweka, tukaua mchakato, na kazi ilikaa katika hali ya Ready kwa dakika kadhaa. Hujibu kazi inaposhindwa kuanza, si programu yako inapokufa baadaye.
- Mzunguko wa kufunika (
while ($true) { & bot; sleep 5 }). Huanzisha tena boti iliyoanguka, lakini kifuniko chenyewe kikifa, mtoto wake huendelea kufanya kazi, na uanzishaji unaofuata huzindua boti ya pili. Tuliishia na nakala mbili, ambazo kwa boti ya Telegram ni michakato miwili inayogombania masasisho yaleyale.
Jinsi ya kuikagua
Get-ScheduledTask -TaskName mybot | Select-Object TaskName, State
Get-ScheduledTaskInfo -TaskName mybot | Select-Object LastRunTime, NextRunTime
Get-Content C:\bots\heartbeat.log -Tail 5
Ili kuisimamisha kwa matengenezo, kwanza Disable-ScheduledTask mybot (vinginevyo kichochezi cha dakika kitaianzisha tena), kisha simamisha mchakato. Enable-ScheduledTask mybot huirudisha.
Kumbukumbu
Kazi hainasi matokeo. Ifanye boti iandike faili yake ya kumbukumbu, kama mfano unavyofanya, au elekeza matokeo katika kizindua kidogo cha .cmd na uelekeze -Execute kwenye faili hiyo.
Mpango gani
Boti ya PowerShell au Python hutumia CPU kidogo, lakini Windows yenyewe huchukua GB 1 hadi 1.3 za RAM ikiwa haifanyi kazi kwenye picha yetu. Windows-Small (vCPU 4, GB 4 za RAM, GB 50, $11 kwa mwezi) ni ukubwa sahihi kwa boti moja au mbili. Kwenye mpango wa NAT, miunganisho ya kutoka (Telegram, API za soko, webhooks unazoita) hufanya kazi kama kawaida. Boti ikihitaji kupokea webhooks au trafiki nyingine ya kuingia, chagua Windows Small-IP ($28 kwa mwezi) yenye IPv4 yake.
Hatua zinazofuata: linda RDP na, ukipendelea kusimamia boti kupitia SSH, sakinisha OpenSSH. Malipo ni kwa USDT, USDC au ETH, na Windows ni Server 2022 yenye leseni yako mwenyewe (BYOL). Mipango yote: VPS ya Windows.
Maoni
Bado hakuna maoni. Kuwa wa kwanza.