通过PM2来管理Node、PHP CLI等脚本应用进程,什么是PM2进程管理器?

9,594次阅读
没有评论

共计 2580 个字符,预计需要花费 7 分钟才能阅读完成。

什么是 PM2?

PM2 官网:https://pm2.keymetrics.io/docs

1. 介绍

PM2.js 是一个 Node.js 应用程序的进程管理器,可以帮助开发人员在生产环境中管理和监控 Node.js 应用程序或其他程序的进程。它可以自动重启应用程序,监控应用程序的资源使用情况,以及提供实时日志记录和错误处理等功能。此外,PM2.js 还可以通过集成的 API 和 CLI 工具来管理和监控多个 Node.js 应用程序。

对于 nodejs 的应用程序,PM2 有一个负载均衡器:

  • 提高应用程序的可用性和可靠性:负载均衡器可以将请求分配到多个服务器上,从而减轻单个服务器的负载,提高应用程序的可用性和可靠性。
  • 提高应用程序的性能:负载均衡器可以根据服务器的负载情况,将请求分配到负载较低的服务器上,从而提高应用程序的性能。
  • 实现高可扩展性:负载均衡器可以根据需要动态地添加或删除服务器,从而实现高可扩展性。
  • 实现会话保持:负载均衡器可以将同一个客户端的请求分配到同一个服务器上,从而实现会话保持。
  • 实现故障转移:负载均衡器可以检测到服务器的故障,并将请求转发到其他可用的服务器上,从而实现故障转移。

启动程序并实现管理是通过 fork 子进程去实现的。应用程序挂掉之后,PM2 会自动重启这个程序,超过最大次数之后,停止重启

PM2 的使用

1. 安装 PM2

$ npm install pm2@latest -g
# or
$ yarn global add pm2

2. 启动应用

启动应用:

$ pm2 start app.js
$ pm2 start bashscript.sh
$ pm2 start python-app.py --watch
$ pm2 start binary-file -- --port 1520
......

同时还支持如下一些启动参数:

  • # 指定应用程序名称,–name <应用程序名称>
  • # 当文件更改时观察并重新启动应用程序,–watch
  • # 设置应用程序重新加载的内存阈值,–max-memory-restart <200MB>
  • # 指定日志文件,–log <日志路径>
  • # 将额外的参数传递给脚本,– arg1 arg2 arg3
  • # 自动重启之间的延迟时间,–restart-delay <延迟时间(以毫秒为单位)>
  • # 在日志前缀中添加时间,–time
  • # 不自动重启应用程序,–no-autorestart
  • # 指定强制重启的 cron 表达式,–cron
  • # 连接到应用程序日志,–no-daemon
  • # 指定环境变量 –env json 对象
  • # 指定时间自动重启 –cron-restart=“0 2 * * *”

定时重启参考:https://www.npmjs.com/package/cron

3. 常用命令

进程管理相关的命令如下:

# app_name 可以使应用的名称或者 ID,也可以是 all,代表所有进程

$ pm2 restart app_name
$ pm2 reload app_name
$ pm2 stop app_name
$ pm2 delete app_name

查看应用状态:

$ pm2 [list|ls|status]

查看运行日志:

$ pm2 logs

# 查看过往日志
$ pm2 logs --lines 200

通过仪表盘查询运行状态:

$ pm2 monit

进程列表相关:

  • pm2 list 命令,显示所有进程状态
  • pm2 jlist 命令,以原始 JSON 格式打印进程列表
  • pm2 prettylist 命令,以美化的 JSON 格式打印进程列表
  • pm2 describe 0 命令,显示有关特定进程的所有信息
  • pm2 monit 命令,监视所有进程

进程日志相关:

  • pm2 logs [–raw] 命令,以流式方式显示所有进程日志
  • pm2 flush 命令,清空所有日志文件
  • pm2 reloadLogs 命令,重新加载所有日志

进程操作相关:

  • pm2 stop all 命令,停止所有进程
  • pm2 restart all 命令,重新启动所有进程
  • pm2 reload all 命令,将 0 秒停机时间重新加载(适用于网络应用程序)
  • pm2 stop 0 命令,停止特定的进程 ID
  • pm2 restart 0 命令,重新启动特定的进程 ID
  • pm2 delete 0 命令,将进程从 pm2 列表中删除
  • pm2 delete all 命令,将所有进程从 pm2 列表中删除

其他的一些命令:

  • pm2 reset 命令,重置元数据(重新启动时间等)
    pm2 updatePM2 命令,更新内存中的 pm2
  • pm2 ping 命令,确保已启动 pm2 守护程序
  • pm2 sendSignal SIGUSR2 my-app 命令,向脚本发送系统信号
  • pm2 start app.js –cron-restart=”0 0 * * *”,额外的重启策略
  • pm2 start app.js –no-daemon 命令,启动进程而不使用守护程序
  • pm2 start app.js –no-vizion 命令,启动进程而不使用版本控制
  • pm2 start app.js –no-autorestart 命令,启动进程而不自动重新启动

3. 重启和恢复

pm2 startup:

此命令将创建一个启动脚本,以便在系统启动时自动启动 PM2 进程管理器。在 Linux 系统中,此命令将创建一个 systemd 服务文件,而在 Windows 系统中,此命令将创建一个 Windows 服务。

$ pm2 startup [platform]
$ pm2 startup ubuntu

pm2 save:

此命令将保存当前 PM2 进程列表,以便在系统重启后自动恢复。对于确保的应用程序在系统重启后自动启动非常有用。

# 备份当前应用列表
$ pm2 save

# 手动恢复以前保存的进程(通过 pm2 save):$ pm2 resurrect

# 禁用和删除当前的启动配置:$ pm2 unstartup

4. 重启策略

  • 在指定的时间点重新启动应用程序
  • 当文件发生更改时重新启动应用程序
  • 当应用程序达到内存阈值时重新启动
  • 延迟启动和自动重启
  • 默认情况下禁用自动重启(应用程序始终使用 PM2 重新启动)当崩溃或退出时
  • 以特定的指数递增时间自动重新启动应用程序

监视文件发生改变:

# 当前目录或其子目录中的文件被修改时,PM2 可以自动重启您的应用程序:$ pm2 start app.js --watch

到达内存上限时:

$ pm2 start api.js --max-memory-restart 300M

禁用自动重启:

$ pm2 start app.js --no-autorestart

5. 脚本管理

相关文档:https://pm2.keymetrics.io/docs/usage/application-declaration/

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2023-04-05发表,共计2580字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)