PM2能否在停止进程前执行Shell脚本?求完整示例
PM2停止/终止进程前执行Shell脚本的实现方法
问题描述
我想了解PM2是否可以在停止/终止进程前执行Shell(bash)脚本?我知道PM2可以启动运行Shell脚本的进程,希望在停止/终止进程前处理一些事务。
我是PM2新手,尝试实现该功能但未成功,恳请提供完整示例。
我执行了以下命令:
pm2 start sleep sleep.sh pm2 list pm2 trigger sleep pre-stop "./test.sh" Not any process has received a command (offline or unexistent)
其中sleep.sh仅执行1000秒休眠,test.sh仅输出Hello。但pm2 trigger命令报错,非常希望得到示例指导。
解决方案
PM2确实支持在进程停止/终止前执行自定义脚本,你之前用pm2 trigger的方式不对,正确做法是通过PM2配置文件定义生命周期钩子,而非临时触发命令。
完整示例步骤
准备脚本文件并添加执行权限
- 业务脚本
sleep.sh:#!/bin/bash echo "业务进程启动,开始休眠1000秒" sleep 1000 - 停止前预处理脚本
pre-stop.sh:#!/bin/bash echo "=== 正在执行停止前的预处理操作 ===" echo "Hello from pre-stop script" # 此处可添加自定义事务逻辑,如清理临时文件、发送通知等
给两个脚本添加执行权限:
chmod +x sleep.sh pre-stop.sh- 业务脚本
创建PM2配置文件(
ecosystem.config.js)
在配置文件中定义进程信息与生命周期钩子:module.exports = { apps: [ { name: "sleep-demo", // 唯一进程名称,避免与系统命令重名 script: "./sleep.sh", // 业务脚本路径 pre_stop: "./pre-stop.sh" // 指定停止前执行的脚本路径 } ] };通过配置文件启动进程
pm2 start ecosystem.config.js测试停止逻辑
执行停止命令:pm2 stop sleep-demo随后通过
pm2 logs sleep-demo查看日志,即可看到pre-stop.sh的输出内容。
错误原因说明
pm2 trigger是用于给在线PM2进程发送自定义信号的工具,并非绑定生命周期钩子的方式;另外你用sleep作为进程名,可能与系统内置命令重名导致PM2无法识别,通过配置文件指定唯一进程名更可靠。
内容的提问来源于stack exchange,提问作者haarse
相关产品推荐
相关产品推荐

