进程守护
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 # 保存进程列表,以便重启
Supervisor
supervisor
是用 Python 开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
安装
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
需使用绝对路径,否则找不到程序;