node.js一般是当成一条用户命令去执行,当断开链接,应用也就停了。如何让node应用当成服务,在后台执行呢?由于最近要实现一个定时发送邮件的功能,所以查了一下,让node在后台运行的方法。
nohup
最简单的办法就是使用nohup命令
nohup node app.js &
linux下一般想让某个程序在后台运行,很多都是使用&在程序结尾来让程序自动运行。比如我们要运行mysql在后台:
/usr/local/mysql/bin/mysqld_safe --user=mysql &
但是我们很多程序并不像mysqld一样可以做成守护进程,可能我们的程序只是普通程序而已,一般这种程序即使使用&结尾,如果终端关闭,那么程序也会被关闭。为了能够后台运行,我们需要使用nohup这个命令,比如我们有个start.sh需要在后台运行,并且希望在后台一直运行,那么就使用nohup:
nohup /root/start.sh &
在shell中回车后提示:
[~]$ appending output to nohup.out
原程序的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。
forever
github地址: https://github.com/nodejitsu/forever
forever是一个简单的命令式nodejs的守护进程,能够启动,停止,重启App应用。forever完全基于命令行操作,在forever进程之下,创建node的子进程,通过monitor监控node子进程的运行情况,一旦文件更新或进程挂掉,forever会自动重启node服务器,确保应用正常运行。
//全局安装
npm install forever -g
//启动
forever start app.js
//关闭
forever stop app.js
//输出日志和错误
forever start -l forever.log -o out.log -e err.log app.js
//自动监控文件变化,文件修改保存之后自动重启app.js
forever -w app.js
//查看帮助
forever -h
pm2
github地址:https://github.com/Unitech/pm2
告别node-forever,拥抱pm2: http://se77en.cc/2013/06/27/goodbye-node-forever-hello-pm2-translation/
npm install -g pm2
pm2 start app.js -i max //启动一个使用所有CPU核心的集群
pm2 list //列出所有pm2开启的进程
pm2 monit
pm2 logs //打印日志