节点js进程退出不工作使用永远
我想要一些关于进程退出的工作。
但是process.on('exit')
不能使用express或者socket.io或mysql等。
process.on('exit', function() { console.log('Server exit.'); });
只有这个代码正在工作。
var mysql = require('mysql'); var conn = mysql.createConnection(); conn.connect(); process.on('exit', function() { console.log('Server exit.'); });
这是行不通的。
这是因为一旦你初始化express()
,说(特别是:启动服务器),或者创build一个MySQL连接,或者做任何其他的“居住在后台”,节点将不会退出,所以不会叫你.on('exit')
。
它不会退出,因为它有待处理的任务。 就好像你要调用setInterval()
。
如果断开MySQL连接,或停止快速服务器,则会退出并调用处理程序。
你可以通过做两件简单的事情来完成工作:
- 而不是使用
exit
事件,而是使用SIGINT
事件(而不是process.on('exit',function(){/*stuff here*/});
使用process.on('SIGINT',function(){/*stuff here*/});
- 当开始永远的脚本,而不是只是做
forever start your-script.js
脚本forever start your-script.js --killSignal=SIGINT
,键入forever start your-script.js --killSignal=SIGINT
这适用于我,但我的脚本不使用太多的MySQL,并没有使用任何expression,所以它可能不适合你