Bir node.js sunucusu nasıl yeniden başlatılır


81

Osx üzerinde bir node.js sunucusu kurdum ve çalıştırıyorum. Bir sohbet modülünü inceledim ve mutlu bir şekilde çalıştırıyor. Bazı parçaları değiştirdim ve etkilerini görmek için sunucuyu yeniden başlatmam gerekiyor.

Yalnızca terminal penceresini kapatıp yeniden açarak ve ardından chatdemo.js node'u çalıştırarak nasıl yeniden başlatılacağını biliyorum.

Terminali kapatmadan yeniden başlatmanın bir yolu var mı?

Teşekkürler.


1
Sonsuza kadar github.com/foreverjs/forever kullanın . O zaman yazmanız gereken tek şeyforever restart
basickarl

Yanıtlar:


102

Eğer sadece çalışıyorsa (bir arka plan programı değilse), o zaman sadece kullanın Ctrl-C.

Daemonize edilmişse, deneyebilirsiniz:

$ ps aux | grep node
you   PID  1.5  0.2  44172  8260 pts/2    S    15:25   0:00 node app.js
$ kill -2 PID

Çıktısındaki PIDsayı ile nerede değiştirilir ps.


9
Aynı etkiye sahip "killall -2 node" u da kullanabilirsiniz.
user123444555621

2
Tüm düğüm süreçlerini öldürmek istemiyorum / buna gerek yok . Açık bir düğüm
repl'im varsa,

8
yan not: bir düğüm arka plan programı başlatınnohup node server.js &
Drew LeSueur

52

Geliştirme sırasında, yapılan değişiklikleri görmek için sunucuyu yeniden başlatmanın en iyi yolu nodemon kullanmaktır .

npm nodemon -g yükle

nodemon [uygulamanızın adı]

nodemon, nodemonun başlatıldığı dizindeki dosyaları izleyecek ve eğer değişirlerse, düğüm uygulamanızı otomatik olarak yeniden başlatacaktır.

Nodemon git deposunu kontrol edin : https://github.com/remy/nodemon


Bu modülü bilmiyordum, çok faydalı bir şey, bana django uygulamamı hatırlatıyor. Teşekkürler.
Hola Soy Edu Feliz Navidad

Harika bir öneri. Geliştirme için kodu hızlı bir şekilde test etmek için çok verimli.
mbokil

tamam teşekkürler, eclipse'i düğüm yerine nodemon kullanacak şekilde nasıl yapılandırabiliriz ..?
Alexander Mills

16

Bu durumda node.js sunucunuzu sık sık yeniden başlatıyorsunuz çünkü aktif geliştirme aşamasında ve her zaman değişiklikler yapıyorsunuz. Tüm .js dosyalarınızı izleyerek ve bu dosyalardan herhangi biri değiştiyse node.js sunucunuzu yeniden başlatarak bunu sizin için halledecek harika bir yeniden yükleme komut dosyası var. Hızlı geliştirme ve test için sadece bilet.

Senaryo ve nasıl kullanılacağına dair açıklama burada Draco Blue'da .


5
Bilginize, şimdi sadece buna adanmış birkaç düğüm modülü var, Düğüm modülleri Wiki sayfasına bir göz atın .
Marco

14

Aynı sorunu yaşadım ve ardından mevcut tüm düğüm işlemlerini öldüren bu kabuk betiğini yazdım:

#!/bin/bash
echo "The following node processes were found:"
ps aux | grep " node " | grep -v grep
nodepids=$(ps aux | grep " node " | grep -v grep | cut -c10-15)

echo "OK, so we will stop these process/es now..."

for nodepid in ${nodepids[@]}
do
echo "Stopping PID :"$nodepid
kill -9 $nodepid
done
echo "Done"

Bu bir kabuk betiği (xxx.sh) dosyası olarak kaydedildikten sonra, burada açıklandığı gibi onu PATH'nize eklemek isteyebilirsiniz .

(Lütfen bunun, grep'in kendi adında "node" bulunan tüm işlemleri öldüreceğini unutmayın, bu nedenle bazı durumlarda benzer ada sahip diğer işlemleri de öldürebilir)


2
Mac osx kullanmam gerekiyorducut -c17-20
ThomasReggi

1
Bu tam olarak ne pkill nodeiçin değil mi?
tandrewnichols

6

"Nodemon" demek soruya cevap verir.

Ancak (tümü) düğüm iblislerini yalnızca nasıl öldüreceğime ilişkin olarak aşağıdakiler benim için işe yarar:

pkill -HUP node

5

Yorumumun pencerelerle ilgili olduğunu anlıyorum, ancak birisi yararlı olabilir. Cmd'de kazanmak için:

wmic process  where "commandline like '%my_app.js%' AND name='node.exe' " CALL Terminate

uygulamanızı tekrar çalıştırabilirsiniz:

node my_app.js

Ayrıca, kaçış tırnak işaretleriyle birlikte toplu iş dosyasında da kullanabilirsiniz:

wmic process  where "commandline like '%%my_app.js%%' AND name='node.exe' " CALL Terminate
node my_app.js

Çok kullanışlı! İyi fikir.
Radmation

2

Düğüm uygulamasını konsoldan çalıştırırsam (sonsuza kadar kullanmadan vb.) Control + C kullanırım, OSX'in sonlandırmak için aynı tuş kombinasyonuna sahip olup olmadığından emin değilim, ancak işlem kimliğini bulup öldürmekten çok daha hızlıdır, ayrıca kullanmakta olduğunuz sohbet uygulamasına aşağıdaki kodu yazın ve ardından uygulamayı kapatmak istediğinizde konsola 'çıkış' yazın.

process.stdin.resume();
process.stdin.setEncoding('utf8');

process.stdin.on('data', function(data) {
  if (data == 'exit\n') process.exit();
});

1

"Kill -9 [PID]" veya "killall -9 düğümü" kullanımı, "kill -2 [PID]" nin çalışmadığı durumlarda benim için çalıştı.


1
Hayır, gitme kill -9. Sürecin temiz bir şekilde bitmesine izin vermez, tanımlayıcıları yetim bırakır ve genellikle gerekli değildir. Vanilya killyeterli, yoksa kill -INTyeterli olacaktır. kill -9Gerçekten gerekmedikçe gitmeyin ve çoğu zaman öyle değil.
ThoriumBR

1

Önce terminal / komut satırını açtıktan sonra proje dizininize gidin, şimdi npm install nodemon --save-dev komutunu kullanarak nodemon'u kurun --save-dev bu komut onun geliştirici bağımlılığı olarak kaydedilmesini sağlayacaktır. Expressjs ile çalışıyorsanız , paket dosyanızda şöyle görünecektir:

{
  "name": "expressjs-app",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "morgan": "~1.9.1",
    "pug": "^2.0.4"
  },
  "devDependencies": {
    "nodemon": "^2.0.3"
  }
}

şimdi package.json dosyanızdaki "start" değerini değiştirin, üretim için çıkış değerini kullanacağız, ancak geliştirme için sunucuyu yeniden başlatmadan kaynak dosyadaki değişiklikleri izlemek için nodemon kullanacağız. Başlangıç ​​için yeni değer "start": "eğer [[$ NODE_ENV == 'production']]; o zaman düğüm ./bin/www; else nodemon ./bin/www; fi"

final package.json dosyası gibi görünecek

{
  "name": "expressjs-app",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "if [[$NODE_ENV=='production']]; then node ./bin/www; else nodemon ./bin/www; fi"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "morgan": "~1.9.1",
    "pug": "^2.0.4"
  },
  "devDependencies": {
    "nodemon": "^2.0.3"
  }
}

nodemon jusy'yi kaldırmak için npm uninstall nodemon komutunu çalıştırın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.