我有一个使用cluster和Forever的应用程序。我希望在关闭或重新启动应用程序之前保存工作人员的信息。所以我使用process.on('SIGINT'),这适用于CTRL + C.
但我坚持永远。是否有可能以某种方式检测到Forever重新启动了应用程序?有什么信号吗?
答案 0 :(得分:3)
这个问题很老了,但是对于那些没有看到它的人来说,最新的永久版本支持--killSignal(这已经在2013年12月添加),所以你可以使用示例--killSignal=SIGUSR2
来捕获这个信号与process.on('SIGUSR2', func)
答案 1 :(得分:0)
永远使用SIGKILL,请参阅https://github.com/nodejitsu/forever-monitor/blob/master/lib/forever-monitor/monitor.js#L353
所以请在process.on('SIGKILL', onStop);
添加process.on('SIGINT', onStop);
,但请注意,之后会永久使用发送“SIGTERM”的kill
https://github.com/nodejitsu/forever-monitor/blob/master/lib/forever-monitor/common.js#L45,process.on('SIGTERM', onStop)
也是如此。
答案 2 :(得分:0)
我建议在重新启动守护程序之前执行kill -s SIGUSR1 <pid>
。可以通过process.on('SIGUSR1')
轻松地在节点中捕获此信号。
kill -s SIGUSR1 <pid>
forever restart test.js
答案 3 :(得分:0)
永远有一个选项--killSignal,你可以将它自定义为其他可记录的信号(如SIGINT),然后在你的应用程序中,使用process.on('SIGINT',...)来捕获它。有一个official example,console.log语句对信号处理程序没有影响,我认为这是一个bug,很快就会修复。