Bot çalışıyor, çalışıyor, bir gün sessizce kapanıyor. Bu yazıda neden çöktüğünü bulmayı ve çökünce otomatik yeniden başlatmayı anlatıyoruz.
Bir bot neden çöker?
| Neden | Belirti |
|---|---|
| Yakalanmamış hata / reddedilen söz (promise) | UnhandledPromiseRejection, süreç sonlanır |
| Bellek sızıntısı | Bellek zamanla artar, sonunda Killed / heap out of memory |
| Discord API / ağ hatası | Bağlantı kopması, ECONNRESET, 429 |
| Bağımlılık veya sürüm uyumsuzluğu | Başlangıçta Cannot find module |
| Eksik intent / izin | Used disallowed intents |
| Sunucu yeniden başlaması | Süreç yöneticisi yoksa bot geri açılmaz |
1. Önce hataları yakalayın
process.on('unhandledRejection', (e) => console.error('unhandledRejection:', e));
process.on('uncaughtException', (e) => { console.error('uncaughtException:', e); process.exit(1); });
client.on('error', console.error);
client.on('shardError', console.error);
Kritik hatadan sonra process.exit(1) ile kontrollü çıkıp süreç yöneticisinin temiz bir başlangıç yapmasını sağlamak, bozuk durumda çalışmaya devam etmekten iyidir.
2. pm2 ile otomatik yeniden başlatma (Node.js)
npm install -g pm2
pm2 start index.js --name botum --max-memory-restart 400M
pm2 save
pm2 startup # sunucu açıldığında pm2'yi başlatır
pm2 logs botum
--max-memory-restart, bellek sızıntısında botu belirli sınırda yeniden başlatır.pm2 monitile bellek/CPU'yu izleyin.- Windows'ta
pm2 startupyerine ek bir araç (ör.pm2-windows-startup) ya da zamanlanmış görev gerekir.
3. systemd ile (Linux)
/etc/systemd/system/botum.service:
[Unit]
Description=Discord Botum
After=network-online.target
[Service]
WorkingDirectory=/opt/botum
ExecStart=/usr/bin/node index.js
Restart=always
RestartSec=5
User=bot
[Install]
WantedBy=multi-user.target
sudo systemctl enable --now botum
journalctl -u botum -f
4. Çökme döngüsüne (crash loop) dikkat
Bot başlar başlamaz çöküyorsa, süreç yöneticisi onu saniyede birkaç kez yeniden başlatabilir. Bu hem kaynak yer hem de Discord'da hız sınırına yol açar. Önlem:
- Bekleme süresi (
RestartSec=5, pm2'de--restart-delay 5000) kullanın. - Üst sınır koyun: art arda N çökmeden sonra durup sizi uyarsın.
- Çökmenin asıl nedenini loglardan bulun; yeniden başlatma sadece belirtiyi gizler.
5. Bot hosting panelinde
Revolvant gibi panellerde bunların çoğu hazırdır: bot çökerse bekleme süresiyle otomatik yeniden başlatılır, çökme sayısı ve son log satırları çökme geçmişi olarak saklanır, maksimum yeniden başlatma sınırından sonra sizi uyarır, sunucu yeniden başlasa bile açık botlar geri gelir. Kurulum için Discord bot hosting sayfasına bakın.
6. Çökmeden haberdar olun
- Webhook bildirimi: Discord, Telegram veya Slack kanalına "bot çöktü" mesajı.
- Uptime izleme: botun yanında bir sağlık adresi çalıştırın ve uptime servisiyle izleyin; kesintide size haber verir.
Sağlık adresi örneği için: Uptime izleme nedir?
Hızlı sorun giderme sırası
- Konsolun son 50 satırına bakın; ilk hatayı bulun.
- Bellek kullanımını izleyin: sürekli artıyor mu?
- Bağımlılıkları ve Node sürümünü doğrulayın.
- Intent ve izinleri Developer Portal'da kontrol edin.
- Hız sınırı (429) var mı? İstekleri azaltın.
- Sorun yalnızca belirli komutlarda mı? O komutun kodunu inceleyin.
Sık sorulan sorular
pm2 mi systemd mi?
Node.js botları için pm2 pratiktir (log, izleme, bellek sınırı dahil). Sunucunuzda başka servisler de yönetiyorsanız systemd işletim sistemiyle bütünleşik çalışır. İkisi de otomatik yeniden başlatma sağlar.
Botum her gün aynı saatte çöküyor. Neden?
Zamanlanmış bir görev, bellek dolması, yedekleme işlemi ya da sunucu bakım penceresi olabilir. Logları ve bellek grafiğini o saat aralığında inceleyin; uptime izleme geçmişi örüntüyü gösterir.
Otomatik yeniden başlatma yeterli mi?
Hayır; belirtiyi gizler. Asıl hatayı bulmak için log ve çökme geçmişini inceleyin, hataları yakalayın ve bellek sızıntısını giderin.
Python botlarını nasıl yeniden başlatırım?
systemd ya da supervisor kullanabilirsiniz; bot hosting panelleri Python süreçlerini de aynı şekilde izler ve yeniden başlatır.
Botunuzu 7/24 çalıştırın
ZIP’i yükleyin, panel kursun, çalıştırsın ve izlesin.