Windows VPS'te bot çalıştırmanın olağan yolu, onu bir RDP oturumunda başlatıp pencereyi kapatmaktır. Bu, bir güncelleme sunucuyu gece 3'te yeniden başlatana ve kimse onu tekrar başlatmayana kadar çalışır. Her Windows Server'da bulunan Görev Zamanlayıcı bunu ek yazılım olmadan çözer. Aşağıdaki düzen:
- betiği açılışta, kimse oturum açmadan önce başlatır;
- çökerse veya öldürülürse bir dakika içinde yeniden başlatır;
- aynı anda asla iki kopya çalıştırmaz.
Üçünü de Windows Server 2022 imajımızda test ettik: işlemi öldürdük, sunucuyu yeniden başlattık ve örnekleri saydık.
Örnek betik
Botunuzun yerine geçen bir örnek: her 10 saniyede bir satır yazar, böylece canlı olup olmadığını görmek kolaydır.
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
}
'@
Görevi kaydedin
Yönetici yetkili bir PowerShell'de çalıştırın:
$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'
Her parçanın görevi:
-AtStartup, Windows açıldığında oturum açmış kullanıcı olmadan botu başlatır.- Dakikalık tekrar, görevi her dakika yeniden çalıştırır. Bot canlıysa hiçbir şey olmaz; öldüyse yeniden başlar.
-MultipleInstances IgnoreNewtekrarı güvenli kılar: botu zaten çalışır bulan bir çalıştırma atlanır.-ExecutionTimeLimit 0, Görev Zamanlayıcı'nın botu durduracağı 72 saatlik varsayılan sınırı kapatır.-User 'SYSTEM'onu parola ve oturum olmadan çalıştırır. SYSTEM sunucuda tam yetkilidir; bu şekilde yalnızca kendi kodunuzu çalıştırın.
Python için eylemi değiştirin:
$action = New-ScheduledTaskAction -Execute 'C:\Program Files\Python312\python.exe' -Argument 'C:\bots\bot.py' -WorkingDirectory 'C:\bots'
Neleri kontrol ettik
Çökme. Botun işlemini Stop-Process -Force ile öldürdük. 46 saniye sonra dakikalık tetikleyici yenisini başlatmıştı ve tam olarak bir kopya vardı.
Yeniden başlatma. Sunucuyu yeniden başlattık ve oturum açmadık. Açılıştan 40 saniye sonra bot günlüğüne yazıyordu; sunucuda hiç kullanıcı oturumu yoktu.
Çalışmayanlar. İki şey doğru görünür ama değildir:
- "Görev başarısız olursa her … yeniden başlat." Açtık, işlemi öldürdük ve görev dakikalarca Hazır durumunda kaldı. Görevin başlayamamasına tepki verir, programınızın sonradan ölmesine değil.
- Sarmalayıcı döngü (
while ($true) { & bot; sleep 5 }). Çöken botu yeniden başlatır, ama sarmalayıcının kendisi ölürse alt işlem çalışmaya devam eder ve bir sonraki başlatma ikinci bir bot açar. Sonunda iki kopyamız oldu; bir Telegram botu için bu, aynı güncellemeler için kavga eden iki işlem demektir.
Kontrol etme
Get-ScheduledTask -TaskName mybot | Select-Object TaskName, State
Get-ScheduledTaskInfo -TaskName mybot | Select-Object LastRunTime, NextRunTime
Get-Content C:\bots\heartbeat.log -Tail 5
Bakım için durdurmak isterseniz önce Disable-ScheduledTask mybot çalıştırın (yoksa dakikalık tetikleyici onu yeniden başlatır), sonra işlemi durdurun. Enable-ScheduledTask mybot her şeyi geri getirir.
Günlükler
Görev çıktıyı yakalamaz. Botun, örnekteki gibi kendi günlüğünü yazmasını sağlayın ya da çıktıyı küçük bir .cmd başlatıcısında yönlendirip -Execute'u o dosyaya yöneltin.
Hangi plan
PowerShell veya Python botu az CPU kullanır, ama Windows'un kendisi imajımızda boşta 1 ile 1,3 GB RAM kaplar. Windows-Small (4 vCPU, 4 GB RAM, 50 GB, $11/ay) bir iki bot için doğru boyuttur. NAT planında giden bağlantılar (Telegram, borsa API'leri, çağırdığınız webhook'lar) normal çalışır. Bot webhook'ları veya başka gelen trafiği alması gerekiyorsa kendi IPv4'ü olan Windows Small-IP ($28/ay) seçin.
Sonraki adımlar: RDP'yi koruyun ve botu SSH ile yönetmeyi tercih ediyorsanız OpenSSH'ı kurun. Ödeme USDT, USDC veya ETH ile yapılır ve Windows, kendi lisansınızla Server 2022'dir (BYOL). Tüm planlar: Windows VPS.
Yorumlar
Henüz yorum yok. İlk olun.