PM2如何列出已停止进程并仅重启对应进程
PM2 停止进程自动重启实现方案
快速实现命令
直接通过管道串联提取、执行逻辑即可,不需要单独把进程名存入列表遍历,一行命令就能完成操作:
pm2 ls | grep "stopped" | grep "process" | awk '{print $2}' | xargs -I {} pm2 restart {}
命令逻辑说明:
awk '{print $2}'会按空白符分割pm2 ls的输出结果,提取第二列的进程名xargs -I {}会把前面输出的每一个进程名替换到{}位置,逐行执行重启操作,支持同时处理多个停止的进程
开机触发脚本配置
如果需要服务器重启时自动执行该逻辑,可以按以下步骤配置:
- 新建shell脚本文件,比如命名为
pm2-restart-stopped.sh,内容如下:
#!/bin/bash # 等待10秒确保PM2服务完全启动,避免开机时命令执行失败 sleep 10 # 重启所有stopped状态的业务进程 pm2 ls | grep "stopped" | grep "process" | awk '{print $2}' | xargs -I {} pm2 restart {} > /dev/null 2>&1
- 给脚本添加执行权限:
chmod +x /你的脚本存放路径/pm2-restart-stopped.sh
- 添加到开机启动项,推荐用crontab的
@reboot规则,执行crontab -e后追加如下内容即可:
@reboot /你的脚本存放路径/pm2-restart-stopped.sh
更稳定的兼容方案
如果存在PM2版本差异导致ls输出列错位的问题,可以用PM2原生的JSON输出格式提取进程信息,兼容性更强:
该方法依赖
jq工具,需要提前安装(Debian/Ubuntu执行apt install jq,CentOS/RHEL执行yum install jq)
pm2 jlist | jq -r '.[] | select(.pm2_env.status == "stopped") | .name' | xargs -I {} pm2 restart {}
内容的提问来源于stack exchange,提问作者SVill
相关产品推荐
相关产品推荐

