如何在Bash脚本中实现当前程序被kill时触发告警
Bash脚本捕获kill信号实现自定义告警逻辑
在Bash中可以通过内置的trap命令绑定信号处理函数,实现脚本收到终止信号时执行自定义的告警、清理操作。需要注意:操作系统层面的SIGKILL信号(对应kill -9命令)无法被捕获、拦截,这种场景下自定义逻辑不会触发,属于系统级限制没有绕过方案。
实现示例
#!/bin/bash # 定义信号处理函数,收到指定kill类信号时执行 on_kill() { echo "trying to kill the demo program ... " sleep 5s echo "demo program killed" # 处理完逻辑后主动退出进程,避免后续原有代码继续执行 exit 0 } # 绑定信号处理函数到常见的终止信号: # SIGTERM:普通kill命令默认发送的信号 # SIGINT:用户按Ctrl+C触发的中断信号 # SIGHUP:运行脚本的终端断开时触发的信号 trap on_kill SIGTERM SIGINT SIGHUP # ---------------------- # 此处放置你的原有程序逻辑 # 以下为示例模拟程序长时间运行 echo "demo program is running, PID: $$" while true; do sleep 1 done
补充说明
- 你可以根据需求修改
on_kill函数内的逻辑,比如将打印操作替换为发送邮件、企业微信、短信告警的命令 - 如果需要捕获其他类型的信号,直接将信号名追加到
trap命令的信号列表中即可 - 信号处理函数末尾必须加
exit主动退出,否则脚本执行完自定义逻辑后会回到原来的执行流程继续运行
内容的提问来源于stack exchange,提问作者IsaIkari
相关产品推荐
相关产品推荐

