LinuxShell脚本异常监控_失败告警设计思路【教程】
发布时间 - 2025-12-24 00:00:00 点击率:次Shell脚本异常监控需精准捕获失败、区分错误类型、及时通知到位:用 $? 和 set -e/set-o pipefail控制执行流,结合 trap 记录上下文日志,并通过邮件/钉钉等精简告警。
Shell脚本运行失败时,光靠肉眼盯日志或手动查退出码,迟早出问题。真正可靠的异常监控,核心就三点:精准捕获失败、区分错误类型、及时通知到位。
用 $? 和 set -e 控制执行流
每个命令执行完,$? 保存它的退出状态。0 表示成功,非0 即失败。别只在最后 echo $? —— 关键步骤后立刻判断,才能准确定位哪一步崩了。
- 写法示例:command1 && command2 || { echo "command2 failed"; exit 1; }
- 更稳妥的做法是加 set -e(遇错即停)+ set -o pipefail(管道中任一环节失败都算整体失败)
- 注意:有些命令天然返回非0(如 grep 找不到内容),要用 || true 或显式判断避免误判
分类记录错误:日志 + 错误码 + 上下文
只记“脚本失败”没用。要留够线索:时间、主机名、脚本名、行号、输入参数、关键变量值、上一条命令输出片段。
- 用 trap 'echo "$(date): ERROR at line $LINENO: $?" >> /var/log/myscript.err' ERR 捕获任意位置错误
- 把 stderr 重定向到日志:2>> /var/log/myscript.log,并加 exec 2>&1 统一输出流
- 对关键步骤打标记,比如 echo "[STEP: backup_db] start" >> log
失败后自动告警:邮件/钉钉/企业微信三选一
告警不是越快越好,而是要让接收人一眼看懂“什么崩了、在哪崩的、大概怎么修”。避免发一堆原始日志。
- 邮件告警:用 mail -s "【ALERT】myscript failed on $(hostname)" admin@example.com
- 钉钉机器人:curl POST JSON,body 包含 text.content 字段,建议高亮错误码和最近10行日志
- 加个开关控制是否告警:[ "$ALERT_ENABLED" = "true" ] && send_alert,方便测试环境关闭
避免重复告警与误报
脚本每分钟跑一次,失败就狂发10条钉钉?没人会理。得加抑制机制。
- 用临时文件锁:失败时生成 /tmp/myscript.last_fail 并写入时间戳,下次运行前检查距上次失败是否
- 对可恢复错误(如网络超时)不告警,只重试3次;对硬错误(如权限拒绝、文件不存在)才触发告警
- 告警消息末尾附上快速诊断命令,例如:"排查建议:tail -20 /var/log/myscript.log"
# linux
# js
# json
# 微信
# 企业微信
# curl
# ai
# 钉钉
# shell脚本
# echo
# date
# mail
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在腾讯云服务器上快速搭建个人网站?
Linux系统命令中tree命令详解
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
Laravel怎么为数据库表字段添加索引以优化查询
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
Laravel如何创建自定义Artisan命令?(代码示例)
EditPlus中的正则表达式实战(6)
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
Android仿QQ列表左滑删除操作
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
文字头像制作网站推荐软件,醒图能自动配文字吗?
公司网站制作价格怎么算,公司办个官网需要多少钱?
,在苏州找工作,上哪个网站比较好?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
图册素材网站设计制作软件,图册的导出方式有几种?
JavaScript模板引擎Template.js使用详解
Laravel中的Facade(门面)到底是什么原理
Laravel如何保护应用免受CSRF攻击?(原理和示例)
怎么用AI帮你设计一套个性化的手机App图标?
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
如何获取免费开源的自助建站系统源码?
使用豆包 AI 辅助进行简单网页 HTML 结构设计
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
如何快速搭建安全的FTP站点?
Internet Explorer官网直接进入 IE浏览器在线体验版网址
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
Laravel如何处理和验证JSON类型的数据库字段
简历没回改:利用AI润色让你的文字更专业
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
Laravel如何实现事件和监听器?(Event & Listener实战)
如何在企业微信快速生成手机电脑官网?
如何快速搭建二级域名独立网站?
轻松掌握MySQL函数中的last_insert_id()
java ZXing生成二维码及条码实例分享
网易LOFTER官网链接 老福特网页版登录地址
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
北京专业网站制作设计师招聘,北京白云观官方网站?
如何解决hover在ie6中的兼容性问题
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】


控制执行流,结合 trap 记录上下文日志,并通过邮件/钉钉等精简告警。