Windows sunucuda Node.js ya da Python uygulamasını servis olarak çalıştırma (NSSM)

RDP ve Windows Sunucu 57 görüntülenme Markdown

Bir uygulamayı Windows'ta komut penceresinden çalıştırırsanız, pencereyi kapattığınızda ya da oturumu kapattığınızda durur. Sunucu yeniden başlayınca da kendiliğinden açılmaz. Gerçek bir çözüm, uygulamayı bir Windows servisi yapmaktır: servisler oturum açmadan çalışır, sunucu açılışında başlar ve çökerse otomatik yeniden başlatılabilir. Normal programları servis yapmanın en kolay yolu NSSM (Non-Sucking Service Manager) adlı ücretsiz küçük araçtır.

NSSM'i alın

NSSM'in kendi sitesinden indirdiğiniz zip dosyasını çıkarın ve 64 bit sürümdeki nssm.exe dosyasını sabit bir klasöre (örneğin C:\araclar\nssm.exe) koyun. Programı güvenilir kaynaktan indirdiğinizden emin olun.

Servis oluşturma

Yönetici Komut İstemi'nde (arayüz için nssm install yazmanız yeter):

C:\araclar\nssm.exe install BotServisi "C:\Program Files\nodejs\node.exe" "C:\botlar\bot\index.js"
C:\araclar\nssm.exe set BotServisi AppDirectory "C:\botlar\bot"
C:\araclar\nssm.exe set BotServisi Start SERVICE_AUTO_START
C:\araclar\nssm.exe start BotServisi

İlk satırda servis adı, çalıştırılacak program (Node.js) ve argümanı (betiğiniz) bulunur. Python için program yolunu python.exe'ye, argüman olarak .py dosyasına verin; sanal ortam kullanıyorsanız ortamın içindeki python.exe'yi gösterin. AppDirectory çalışma klasörünü belirler; göreli yollar buradan çözülür. Birçok hatanın nedeni bu ayarın verilmemesidir.

Günlük ve yeniden başlatma ayarları

C:\araclar\nssm.exe set BotServisi AppStdout "C:\botlar\gunluk.txt"
C:\araclar\nssm.exe set BotServisi AppStderr "C:\botlar\hata.txt"
C:\araclar\nssm.exe set BotServisi AppRotateFiles 1
C:\araclar\nssm.exe set BotServisi AppExit Default Restart
C:\araclar\nssm.exe set BotServisi AppRestartDelay 5000

Uygulamanın yazdıkları dosyalara gider (günlük döndürme açık), uygulama çökerse 5 saniye sonra yeniden başlatılır. Çökme döngüsüne girerse günlüğe bakın.

Yönetim

nssm status BotServisi
nssm restart BotServisi
nssm stop BotServisi
nssm remove BotServisi confirm

Windows'un kendi Hizmetler uygulamasından (services.msc) de servisi görüp durdurabilirsiniz. Güncelleme yaparken önce nssm stop ile durdurun, dosyaları değiştirin, sonra başlatın.

Sık sorunlar

  • Servis başlıyor ama hemen duruyor: hata.txt'ye bakın. Genellikle yanlış yol, eksik ortam değişkeni (PATH servisin hesabında farklıdır) ya da gerekli bir klasörün olmamasıdır. nssm set BotServisi AppEnvironmentExtra ANAHTAR=değer ile ortam değişkeni ekleyin. Tam yol kullanın.
  • Dosya izinleri: Servis varsayılan olarak LocalSystem hesabıyla çalışır. Ağ paylaşımı kullanacaksa farklı bir hesap gerekebilir (nssm set BotServisi ObjectName hesap parola).
  • Pencereli program: Servisler ekran göstermez. Grafik arayüz gerektiren program servis olarak çalışmaz; Görev Zamanlayıcı ile oturum açılışında çalıştırın: Görev Zamanlayıcı.
  • Port erişimi: Uygulama bir portu dinliyorsa güvenlik duvarında açın: port açma.

Linux'taki karşılığı systemd servisidir: arka planda çalıştırma. Discord botu gibi hafif işler için hazır bir çözüm istiyorsanız Bot ve Uygulama Hosting bu işi sizin yerinize halleder.

Sık sorulanlar

NSSM yerine ne kullanabilirim?

Windows'un kendi sc create komutu yalnızca gerçek servis olarak yazılmış programlarla çalışır; sıradan uygulamalar için NSSM gerekir. Alternatif olarak Görev Zamanlayıcı (oturumsuz) çalışır ama yeniden başlatma yönetimi zayıftır.

Servis çalışıyor ama bot Discord'da çevrimdışı.

Günlüğe bakın: genellikle token ortam değişkeni servise iletilmemiştir. AppEnvironmentExtra ile ekleyin: token güvenliği.

Güncelleme yaptıktan sonra eski sürüm çalışıyor.

Servisi durdurmadan dosyaları değiştirdiyseniz süreç eski kodu bellekte tutuyordur. nssm restart ile yeniden başlatın.

İlgili makaleler

Sorununuz çözülmediyse destek talebi açın. Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.