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

https://kervanhosting.com/bilgi-bankasi/makale/windows-sunucuda-node-js-python-uygulamasini-servis-olarak-calistirma-nssm

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ı](https://kervanhosting.com/bilgi-bankasi/makale/windows-sunucuda-gorev-zamanlayici-ile-program-ve-betik-calistirma).
- **Port erişimi:** Uygulama bir portu dinliyorsa güvenlik duvarında açın: [port açma](https://kervanhosting.com/bilgi-bankasi/makale/windows-sunucuda-guvenlik-duvarinda-port-acma).

Linux'taki karşılığı systemd servisidir: [arka planda çalıştırma](https://kervanhosting.com/bilgi-bankasi/makale/bir-programi-arka-planda-surekli-calistirma-screen). Discord botu gibi hafif işler için hazır bir çözüm istiyorsanız [Bot ve Uygulama Hosting](https://kervanhosting.com/bot-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](https://kervanhosting.com/bilgi-bankasi/makale/bot-token-ve-gizli-bilgileri-guvende-tutma).

### 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**

- [Windows sunucuda program kurma ve 7/24 çalıştırma](https://kervanhosting.com/bilgi-bankasi/makale/windows-sunucuda-program-kurma-ve-7-24-calistirma)
- [Windows Görev Zamanlayıcı ile program ve betik çalıştırma (açılışta, saatlik)](https://kervanhosting.com/bilgi-bankasi/makale/windows-sunucuda-gorev-zamanlayici-ile-program-ve-betik-calistirma)
- [Node.js veya Python uygulamamı sunucuda nasıl yayınlarım?](https://kervanhosting.com/bilgi-bankasi/makale/node-js-veya-python-uygulamami-sunucuda-nasil-yayinlarim)

*Sorununuz çözülmediyse [destek talebi açın](https://kervanhosting.com/destek-taleplerim). Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.*
