2010-07-21 209 views
57

我已經安裝並正在osx上運行node.js服務器。我已經失去了一個聊天模塊,並且很高興地運行它。我修改了一些部分,需要重新啓動服務器才能看到效果。如何重新啓動node.js服務器

我只知道如何通過關閉終端窗口重新啓動它,然後再次運行節點chatdemo.js來重新啓動。

任何方式重新啓動沒有關閉終端?

謝謝。

+0

使用永遠https://github.com/foreverjs/forever。然後你只需輸入'forever restart' – 2016-10-25 13:27:40

回答

71

如果它只是運行(不是守護進程),那麼只需使用Ctrl-C

如果它的進程化,那麼你可以嘗試:

$ 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 

PID通過的ps輸出數代替。

+6

你也可以使用「killall -2 node」,它具有相同的效果。 – user123444555621 2010-07-22 17:09:06

+2

不想/需要殺死_all_節點進程。如果我有一些節點repl的打開,我會成爲一個不幸的露營者之後:) – rfunduk 2010-07-23 20:43:11

+7

備註:通過'nohup node server.js&' – 2010-10-30 18:28:46

16

在這種情況下,您經常會重新啓動node.js服務器,因爲它處於活動狀態,並且您一直在進行更改。有一個偉大的熱加載腳本,將通過觀看所有的.js文件並重新啓動你的node.js服務器,如果這些文件中的任何一個已經改變,將爲你處理。只是快速開發和測試的門票。

關於如何使用它的腳本和解釋在Draco Blue

+5

開始一個節點守護進程FYI現在有幾個節點模塊專門用於這一點,看看[Node modules Wiki page](https://github.com/joyent/node/wiki/modules#wiki-build-and-deployment)。 – Marco 2011-10-12 20:32:11

11

我有同樣的問題,然後寫這個shell腳本,它可以殺死所有的現有節點過程:

#!/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" 

保存爲一個shell腳本(xxx.sh)這個文件後,你可能要添加它會按照here所述的PATH進行。

(請注意,這將殺死所有與它的名字「節點」的過程中,除了grep的自己,所以我想在某些情況下,它也可以殺死具有類似名稱的一些其他工藝)

+2

我在mac osx上我不得不使用'cut -c17-20' – ThomasReggi 2012-07-19 03:44:21

+0

這不正是pkill節點的用途嗎? – tandrewnichols 2015-01-04 20:08:48

38

在開發過程中重新啓動服務器,看到所做的更改的最佳方法是使用nodemon

NPM安裝nodemon -g

nodemon [你的應用程序名稱]

nodemon將監視nodemon啓動的目錄中的文件,如果它們更改,它將自動重新啓動節點應用程序。

檢查nodemon混帳回購協議:https://github.com/remy/nodemon

+0

我不知道這個模塊,它非常有用,讓我想起我的django應用程序。謝謝。 – 2013-08-20 20:22:28

+0

意外的建議。非常有效的開發以快速測試代碼。 – mbokil 2014-06-04 04:23:09

+0

好的,謝謝,我們如何配置eclipse來使用nodemon而不是node ..? – 2014-09-26 05:51:43

2

使用 「殺-9 PID]」 或 「killall -9節點」 爲我工作,其中 「殺-2 [PID]」 沒有工作。

2

如果我只是從控制檯運行節點應用程序(不使用永遠等)我使用控制+ C,不知道如果OSX有相同的組合鍵終止,但比找到進程ID並殺死它快得多,你也可以將下面的代碼添加到您正在使用的聊天應用程序中,然後在控制檯中輸入'exit'以關閉應用程序。

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

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

據我所知,我的評論與Windows相關,但可能會有人有用。 對於在cmd中取勝 運行:

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

那麼你可以再次運行你的應用程序:

node my_app.js 

您也可以在批處理文件中使用它,以逃避報價:

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

說「nodemon」會回答這個問題。

但對如何只殺(全部)節點惡魔(S),對我來說以下工作:

pkill -HUP node