2015-03-13 24 views
2

我有我的命令行運行,直到永遠節點腳本:forever index.js在某些情況下,我可以永遠防止重新啓動我的節點腳本嗎?

當該腳本崩潰,我想永遠重新啓動它,但不是所有的時間。我知道某些情況需要人工干預才能解決。在這些情況下,我希望能夠以一種永遠不會重新啓動的方式退出流程。

有沒有辦法做到這一點?

我原本以爲我可以用process.exit(1)重新啓動進程,而不是用process.exit(0)重啓,但顯然情況並非如此。

這裏是另一種方式把它:

  • 填寫在下面的代碼的空白。
  • 結果保存爲index.js
  • 啓動與forever index.js
  • 腳本的劇本應打印 「你好」,退出,而不是重新啓動

    setTimeout(function() { 
        console.log("hello") 
        // YOUR CODE GOES HERE 
    }, 1500) 
    

由方式,延遲只是在默認情況下工作--minUpTime爲1秒

回答

2

永遠支持退出信號定製與--killSignal選項:

--killSignal  Support exit signal customization (default is SIGKILL), 
       used for restarting script gracefully e.g. --killSignal=SIGTERM 

以上是用於指示永遠與殺信號停止腳本永遠已經開始。要根據腳本退出的方式選擇性地停止運行腳本,您需要使用forever-monitor

首先,你的腳本需要發送一個特定的信號,當你想永遠地而不是重新啓動它。下面是我們的script.js:

setTimeout(function() { 
    console.log('hello'); 

    //process.kill(process.pid, 'SIGKILL'); // this will cause forever to restart the script. 

    setTimeout(function() { 
     process.kill(process.pid, 'SIGTERM'); // this will cause forever to stop the script. 
    }, 1000); 
}, 2000); 

然後,我們需要一個額外的腳本永遠顯示器(姑且稱之爲腳本monitor.js):

var forever = require('forever-monitor'); 

var child = new (forever.Monitor)('script.js', { 
    max: 10, 
    silent: false, 
    args: [] 
}); 

child.on('restart', function() { 
    console.error('Forever restarting script for ' + child.times + ' time'); 
}); 

child.on('exit:code', function(code) { 
    console.error('Forever detected script exited with code ' + code); 
    if (143 === code) child.stop(); // don't restart the script on SIGTERM 
}); 

child.start(); 

現在可以運行的腳本。 js通過運行:node script-monitor.js

爲方便起見,node.js中的信號事件here is a list

+0

我讀過這個,但我不知道如何使用它。當我'process.exit()',我可以傳入一個整數。我無法通過SIGTERM或SIGKILL。另外,killSignal實際上做了什麼?如果我將它設置爲SIGTERM,將會停止發生什麼樣的默認行爲?什麼新行爲出現? – Shawn 2015-03-13 16:10:04

+0

我想最好的解決方案取決於你什麼時候不想永遠重啓過程。例如,如果你只是想在你故意「處理」時重新啓動腳本。然後你可以指定'--killSignal = SIGTERM'如果你需要更多的自定義的情況,那麼你可能需要考慮永久監視器,並用永遠監視器編寫一個節點腳本,情況下重新啓動/不重新啓動,然後運行您的節點腳本。 – 2015-03-13 16:20:57

+0

我編輯了我的問題,使其更清晰。我已經嘗試過使用'--killSignal = SIGTERM'和'process.exit()',但腳本仍然會重新啓動... – Shawn 2015-03-13 16:38:48

相關問題