Cara umum menjalankan bot di VPS Windows adalah memulainya di sesi RDP lalu menutup jendelanya. Itu berjalan sampai pembaruan me-restart server pukul 3 pagi dan tidak ada yang menjalankannya lagi. Task Scheduler, yang ada di setiap Windows Server, menyelesaikan ini tanpa perangkat lunak tambahan. Pengaturan di bawah ini:
- menjalankan skrip saat boot, sebelum ada yang login;
- menjalankannya lagi dalam satu menit jika crash atau dimatikan;
- tidak pernah menjalankan dua salinan sekaligus.
Ketiganya kami uji di image Windows Server 2022 kami: mematikan proses, me-restart server, dan menghitung instansnya.
Skrip contoh
Pengganti bot Anda: menulis satu baris setiap 10 detik, jadi mudah melihat apakah ia masih hidup.
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
}
'@
Daftarkan tugas
Jalankan di PowerShell dengan hak administrator:
$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'
Fungsi setiap bagian:
-AtStartupmenjalankan bot saat Windows menyala, tanpa pengguna yang login.- Pengulangan setiap menit menjalankan tugas lagi setiap menit. Jika bot hidup, tidak terjadi apa-apa; jika mati, ia mulai lagi.
-MultipleInstances IgnoreNewmembuat pengulangan aman: eksekusi yang mendapati bot sudah berjalan akan dilewati.-ExecutionTimeLimit 0mematikan batas bawaan 72 jam, yang setelahnya Task Scheduler akan menghentikan bot.-User 'SYSTEM'menjalankannya tanpa kata sandi dan tanpa sesi. SYSTEM punya hak penuh di server, jadi jalankan hanya kode Anda sendiri dengan cara ini.
Untuk Python, ganti aksinya:
$action = New-ScheduledTaskAction -Execute 'C:\Program Files\Python312\python.exe' -Argument 'C:\bots\bot.py' -WorkingDirectory 'C:\bots'
Yang kami periksa
Crash. Kami mematikan proses bot dengan Stop-Process -Force. 46 detik kemudian pemicu per menit sudah menjalankan yang baru, dan hanya ada tepat satu salinan.
Restart. Kami me-restart server dan tidak login. 40 detik setelah boot, bot sudah menulis ke log-nya, tanpa sesi pengguna di server.
Yang tidak berhasil. Dua hal tampak benar padahal tidak:
- "Jika tugas gagal, mulai ulang setiap…" Kami mengaktifkannya, mematikan proses, dan tugas berdiam beberapa menit dalam status Ready. Opsi ini bereaksi pada tugas yang gagal dimulai, bukan pada program yang mati belakangan.
- Loop pembungkus (
while ($true) { & bot; sleep 5 }). Loop ini menjalankan ulang bot yang crash, tetapi jika pembungkusnya sendiri mati, anaknya terus berjalan dan eksekusi berikutnya menjalankan bot kedua. Kami berakhir dengan dua salinan, yang untuk bot Telegram berarti dua proses yang berebut pembaruan yang sama.
Cara memeriksa
Get-ScheduledTask -TaskName mybot | Select-Object TaskName, State
Get-ScheduledTaskInfo -TaskName mybot | Select-Object LastRunTime, NextRunTime
Get-Content C:\bots\heartbeat.log -Tail 5
Untuk menghentikannya saat pemeliharaan, jalankan dulu Disable-ScheduledTask mybot (jika tidak, pemicu per menit akan menjalankannya lagi), lalu hentikan prosesnya. Enable-ScheduledTask mybot mengembalikannya.
Log
Tugas tidak menangkap output. Biarkan bot menulis log-nya sendiri, seperti contoh, atau alihkan output di peluncur .cmd kecil dan arahkan -Execute ke file itu.
Paket yang mana
Bot PowerShell atau Python memakai sedikit CPU, tetapi Windows sendiri memakai 1 hingga 1,3 GB RAM saat diam di image kami. Windows-Small (4 vCPU, RAM 4 GB, 50 GB, $11/bln) adalah ukuran yang pas untuk satu atau dua bot. Di paket NAT, koneksi keluar (Telegram, API bursa, webhook yang Anda panggil) berjalan seperti biasa. Jika bot perlu menerima webhook atau lalu lintas masuk lain, pilih Windows Small-IP ($28/bln) dengan IPv4 sendiri.
Langkah berikutnya: amankan RDP dan, jika Anda lebih suka mengelola bot lewat SSH, pasang OpenSSH. Pembayaran dengan USDT, USDC, atau ETH, dan Windows-nya adalah Server 2022 dengan lisensi Anda sendiri (BYOL). Semua paket: Windows VPS.
Komentar
Belum ada komentar. Jadilah yang pertama.