进程守护

nohup

nohup ./my-app > /dev/null 2>&1 &

拆分解释:

  • nohup: 这个命令用于忽略挂起(HUP)信号
  • ./my-app: 被运行的程序
  • \> /dev/null: 这个部分将标准输出(stdout)重定向到 /dev/null,即丢弃所有标准输出。(不在终端打印出来)
  • 2>&1: 这个部分将标准错误(stderr)重定向到标准输出,因为标准输出已经被重定向到 /dev/null,因此标准错误也会被丢弃
  • &:这个符号将命令放到后台执行,使得你可以在终端中继续进行其他操作。

pm2

PM2 是 node 进程管理工具,可以利用它来简化很多应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单。

安装

环境要求:

  • Nodejs 14.x ^

安装方式

npm install pm2 -g

使用

pm2 start app.js                                    # 启动项目
pm2 start app.js --name "my-app"                    # 启动项目-自定义名称
pm2 stop my-app                                     # 停止运行
pm2 restart my-app                                  # 重启
pm2 delete my-app                                   # 删除
pm2 [list|ls|status]                                # 查看项目列表
pm2 show my-app                                     # 查看项目详情
pm2 logs                                            # 查看全部日志
pm2 log my-app                                      # 查看指定项目日志
pm2 monit                                           # 实时仪表盘
pm2 plus                                            # Web 仪表盘
pm2 save                                            # 保存进程列表,以便重启

更多用法,详见官方文档open in new window

Supervisor

supervisor 是用 Python 开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。

官方网站open in new window

安装

yum install supervisor                          # centos7.x为例
apt install supervisor                          # debain、ubuntu为例

# 开机启动
systemctl enable supervisor
systemctl enable supervisord                    # 或者

使用

启动服务

sudo service supervisor start

创建配置

# /etc/supervisor/conf.d/my-app.conf
[program:gf-app]
user           = root
directory      = /var/www 
command        = /var/www/main
stdout_logfile = /var/log/gf-app-stdout.log
stderr_logfile = /var/log/gf-app-stderr.log
autostart      = true
autorestart    = true

生效配置

sudo supervisorctl                              # 进入管理界面

reload                                          # 重新读取配置文件并重启所有进程
update                                          # or 用这个,重新加载配置(默认不重启)
status                                          # 查看状态

start my-app                                    # 启动指定应用

常见问题

  • conf 配置文件更新后需要在 supervisorctl 中执行 reload 才能重新加载配置文件;
  • directory 工作目录不可缺少,且必须在 command 之前;
  • command 需使用绝对路径,否则找不到程序;
Last Updated:
Contributors: 余小波