守护进程(daemon)

概念:就是一直在后台运行的进程
##缘由:启动Web应用后,当退出命令行窗口,应用就会退出。要让它成为一种服务(service),这就需要变成系统的守护进程

前台任务与后台任务

前台任务:如上的启动脚本就是“前台服务(foreground job)”,会独占命令行窗口,需要手动终止
##后台任务:这是变成守护进程的第一步,变成”后台任务“「(background job)
特点:继承当前会话的标准输出和标准错误
不再继承当前会话的标准输入,即不能再向任务中输入任何指令
##命令:将已启动的脚本运行为后台任务:$ ctrl + z
$ bg
直接启动为后台任务: $ node server.js &

SIGHUP信号

原理:

  1. 1. 用户准备退出session
  2. 1. 系统向该session发出SIGHUP信号
  3. 1. sessionSIGHUP信号发给所有子进程
  4. 1. 子进程收到SIGHUP信号后,自动退出

前台任务在session退出后,子进程会收到SIGHUP命令
##shopt | grep huponexit(大多数linux系统,该参数默认是off),后台任务不会收到SINGHUP信号,因此不会退出

disown命令

有些linux系统的huponexit有可能是on,保险方法使用disown
##使用jobs命令可以查看后台任务列表
##disown命令启动: $ node server.js &
$ disdown
##常用命令:
$ disown // 将最近正在执行的后台任务移除后台任务列表
$ disown -r // 将所有正在执行的后台任务移除列表
$ disown -a // 将所有后台任务移除列表
$ disown -h // 不移除列表,但不接收SIGHUP信号
$ disown %2// 根据jobId,移除指定的后台任务
$ disown -h %2 同上
目前后台进程与标准I/O有交互,不会挂掉。如果有挂掉,则对后台任务的标准I/O进行重定向
$ node server.js > stdout.txt 2 > stderr.txt < /dev/null &
$ disown

nohup命令

$ nohup node server.js &
该命令做了三件事:

  1. 阻止SIGHUP信号发到这个进程
  1. 关闭标准输入
  1. 重定向标准输出和标准错误到文件nohup.out

⚠️:该命令不会将进程变为后台任务

Screen 命令与Tmux命令

终端复用器:在同一个终端里面,管理多个session
##Screen用法:
$screen // 新建一个session
$node server.js
ctrl + a 和ctrl + d回到原来的session
$screen -r // 切回新建的session
若新建多个后台的session,则需要指定名字
$ screen -S name
$ screen -r name // 切到指定session
$ screen -r pid_number
$ screen -ls // 列出所有session
ctrl + c 和 ctrl + d // 切到该session,停掉该session
##Tmux用法:
$ tmux
$ node server.js
$ tmux detach or ctrl + b 和 d // 切回原来的session
$ tmux attach // 下次登录,返回后台正在运行的session
若新建多个session,
$ tmux new -s session_name // 新建session
$ tmux attach -t session_name // 切换到指定session
$ tmux list -sessions // 列出所有session
$ tmux detach // 退出当前session, 返回前一个session
$ tmux kill -session -t session-name // 杀死指定session

Node工具

forever 、nodemon和pm2
##forever具体命令见:http://www.ruanyifeng.com/blog/2016/02/linux-daemon.html
##nodemon:
$ nodemon server.js // 默认监听当前目录的文件变化
$ nodemon —watch app —watch libs server.js //

 ##pm2:  安装pm2:npm install pm2@latest -g<br />            常用命令:$ pm2 start app.js // 启动应用<br />    $ pm2 start app.js -i max // 指定同时起多个进程(由CPU核心数决定),组成一个集群<br />    $ pm2 list // 列出所有任务<br />    $ pm2 stop 0 // 停止指定任务<br />    $ pm2 restart 0 // 重启指定任务<br />    $ pm2 delete 0 // 删除指定任务<br />    $ pm2 save    // 保存当前的所有任务, 以后可以恢复<br />    $ pm2 monit // l列出每个进程的统计数据<br />    $ pm2 logs // 查看所有日志<br />    $ pm2 dump // 导出数据<br />    $ pm2 kill //重启所有进程<br />    $ pm2 resurect<br />    $ pm2 web // 启动web界面<br />  <br />