Yaz sıcağı — her şey eriyor, fiyatlarımız bile.−25%31 Ağustos'a kadar her yıllık planda −%25Planları gör
EQVPS
Hemen başla

Bir botu bir VPS'te 7/24 çalışır tut (böylece asla sessizce ölmez)

15 Haz 2026 · 2 dk okuma · EQVPS Team

Bir botun bir sunucuda "çalışmamasının" iki yolu var. Bariz olanı: SSH'ı kapattığın saniye durur. Sinsi olanı: iki gün sorunsuz çalışır, gece 4'te yakalanmamış bir hatada çöker ve saatler sonra biri neden kapalı olduğunu sorunca öğrenirsin. İkisinin de aynı çözümü var ve o "yeniden başlatmayı unutma" değil — işi systemd'ye devretmek, ki o şeyleri ayakta tutar, sen tutmak zorunda kalmayasın.

Çıkış yapınca neden ölür

Onu SSH oturumunda python bot.py ile başlattıysan, süreç o oturumun bir çocuğudur. Oturumu kapat, süreç de onunla gider. nohup ve & bunun üstünü örter ama sana çökmede yeniden başlatma ve açılışta başlatma vermez — yani küçük sorunu çözüp büyüğünü tuttun.

Gerçek çözüm: bir systemd hizmeti

Her şey bu. /etc/systemd/system/mybot.service oluştur:

[Unit]
Description=My bot
After=network-online.target

[Service]
WorkingDirectory=/home/youruser/mybot
ExecStart=/home/youruser/mybot/venv/bin/python bot.py
Restart=always
RestartSec=5
User=youruser
Environment=API_KEY=...

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now mybot

Ağır işi yapan iki satır var:

Hâlâ hatalı davranıyorsa — logları oku

Çökme döngüsüne giren bir bot daha sert yeniden başlatarak düzelmez; gerçekten bir şey yanlıştır. systemd stdout/stderr'i yakalar, o yüzden:

systemctl status mybot          # açık ya da kapalı, son çıkış kodu
journalctl -u mybot -n 100      # son loglar + öldüğü hata
journalctl -u mybot -f          # canlı takip

Sebep neredeyse her zaman tam oradadır: eksik bir ortam değişkeni, yakalanmamış bir istisna, bir API zaman aşımı, bir OOM kill. Onu düzelt — Restart=always bir güvenlik ağıdır, gerçek bir hatanın tedavisi değil.

İpucu: loglar botun bellek için öldürüldüğünü gösteriyorsa, kutuyu aşmışsın demektir — boyutlandırma kılavuzuna bak.

tmux ya da pm2 ne zaman mantıklı

systemd tek cevap değil, sadece en iyi varsayılan:

Tek, her zaman açık bir bot ya da ajan için systemd gerçekten işe yarayan en basit şeydir — zaten sunucuda, ek araç gerektirmez ve yeniden başlatmayı, açılışta başlatmayı ve loglamayı kutudan çıkar çıkmaz yapar.

Dürüst sonuç

Çalışma süresi daha büyük bir sunucuyla ya da daha çok disiplinle ilgili değil — sürecini dizüstüne bağlamamakla ilgili. Onu Restart=always ve enable içeren bir systemd birimine sar ve bir şey ters gittiğinde journalctl'yi kontrol et. Bunu bir kez yap ve botun, sen izlesen de uyusan da ayakta kalsın. (Yeni kutu mu? Önce kilitle — 7/24 bir bot aynı zamanda 7/24 bir hedeftir.)


Çalıştıracak bir yere mi ihtiyacın var? Bir Nano planı ($3/ay) bir botu 7/24 ayakta tutar — gerisini systemd yapar.

SSS

SSH'ı kapatınca botum neden duruyor?

Çünkü onu SSH oturumunun içinde başlattın, o yüzden o oturuma bağlıdır ve bağlantıyı kestiğinde ölür. Çözüm, onu girişinden bağımsız bir arka plan hizmeti olarak çalıştırmaktır — systemd temiz yol, tmux hızlı yoldur.

Bir botu çöktüğünde nasıl otomatik yeniden başlatırım?

Onu Restart=always ve küçük bir RestartSec gecikmesiyle bir systemd hizmeti olarak çalıştır. systemd o zaman süreci herhangi bir çökmeden saniyeler sonra, süresiz olarak, bakıcılık olmadan yeniden başlatır. O tek satır, 'gece 4'te öldü' ile 'bir an takıldı ve toparladı' arasındaki farktır.

Bir botun bir yeniden başlatmadan sonra otomatik başlamasını nasıl sağlarım?

systemctl enable ile hizmetini etkinleştir. 'enable' onu açılışta başlayacak şekilde bağlar, 'start' şimdi çalıştırır — ikisini de yap (systemctl enable --now). Herhangi bir yeniden başlatmadan sonra bot, sen giriş yapmadan kendi başına geri gelir.

systemd mi pm2 mi tmux mı — hangisini kullanmalıyım?

Gerçek ve uzun ömürlü her şey için systemd: yeniden başlatmayı, açılışta başlatmayı ve loglamayı yerel olarak halleder, ek araç yok. tmux hızlı bir test ya da etkileşimli bir çalışmayı izlemek için harika. pm2, Node dünyasında yaşıyorsan ve kontrol panelini istiyorsan makul ama çalışır tutman gereken başka bir şey. Tek, her zaman açık bir bot için systemd basitlikte kazanır.

Botumun neden çökmeye devam ettiğini nasıl görürüm?

journalctl -u yourbot -n 100 son logları ve öldüğü hatayı gösterir; canlı takip için -f ekle. Gerçek sebep genelde burada saklanır — eksik bir ortam değişkeni, yakalanmamış bir istisna, bir API zaman aşımı. Onu düzelt, körlemesine yeniden başlatma.

← Blog'a dönPlanları ve fiyatları gör →

Yorumlar

Henüz yorum yok. İlk olun.

Bir yorum bırakın

Yorumlar görünmeden önce denetlenir.