介绍
“守护进程”(daemon)就是一类在后台运行的特殊进程,用于执行特定的系统任务,很多守护进程在系统引导时候启动并一直运行到系统关闭,也有一些在需要时候启动,完成任务后自动结束。
问题
一个简单的node server.js 一旦退出命令行窗口,这个应用就一起退出,无法访问了。那么如何才能让他一直运行呢?有以下办法:
办法一 &
$ node server.js &
只要在命令的尾部加上符号&,启动的进程就会成为”后台任务”。
办法二 sighup信号 disown
todo
办法三 nohup命令
nohup node server.js $
nodup命令做了三件事:
1.阻止sighup信号发到这个进程
2.关闭标准输入
3.重定向标准输出和标准错误到文件nohup.out
办法四 screen命令和tmux命令
终端复用器 terminal multiplexer :在同一个终端里,管理多个session典型的就是screen和tmux
screen用法
1 | #新建一个session |
tmux用法
1 | #Debian系和Ubuntu: |
办法五 Node工具
针对node有一些专门的启动工具::forever,nodemon 和 pm2。
forever 保证进程退出时,应用会自动重启。
1 | # 作为前台任务启动 |
nodemon一般只在开发时使用,它最大的长处在于 watch 功能,一旦文件发生变化,就自动重启进程。
1
2
3
4
5
6 > # 默认监视当前目录的文件变化
> $ nodemon server.js
>
> # 监视指定文件的变化
> $ nodemon --watch app --watch libs server.js
>
pm2 的功能最强大,除了重启进程以外,还能实时收集日志和监控。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 > # 启动应用
> $ pm2 start app.js
>
> # 指定同时起多少个进程(由CPU核心数决定),组成一个集群
> $ pm2 start app.js -i max
>
> # 列出所有任务
> $ pm2 list
>
> # 停止指定任务
> $ pm2 stop 0
>
> # 重启指定任务
> $ pm2 restart 0
>
> # 删除指定任务
> $ pm2 delete 0
>
> # 保存当前的所有任务,以后可以恢复
> $ pm2 save
>
> # 列出每个进程的统计数据
> $ pm2 monit
>
> # 查看所有日志
> $ pm2 logs
>
> # 导出数据
> $ pm2 dump
>
> # 重启所有进程
> $ pm2 kill
> $ pm2 resurect
>
> # 启动web界面 http://localhost:9615
> $ pm2 web
>
办法六 Systemd
为系统的启动和管理提供一套完整的解决方案,d就是守护daemon的意思,它守护整个系统,替代initd
优点是功能强大 缺点是体系庞大太复杂。
systemctl是主命令,用于管理系统
1 | # 重启系统 |
systemd-analyze命令用于查看启动耗时
1 | # 查看启动耗时 |
hostnamectl命令用于查看当前主机的信息。
1 | # 显示当前主机的信息 |
unit管理
1 | # 立即启动一个服务 |