You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本邮件功能异常求助:VoIP SIP中继监控脚本无法发信

好的,咱们一步步来排查这个邮件告警的问题——既然手动测试email -s "test" me@me.com能正常发信,那大概率是脚本里的调用逻辑、运行环境或者触发条件出了问题,咱们从这几个方向逐一排查:

排查Bash脚本邮件发送故障的具体步骤

1. 先核对脚本里的邮件命令写法

首先确认脚本里调用邮件的代码和你手动测试的逻辑完全一致:

  • 有没有把命令写错?比如手动用的是email,脚本里误写成了mail或者sendmail?
  • 主题参数-s有没有漏?收件人地址格式是不是和测试时完全一样?
  • 如果要把/tmp/checkpeers的日志作为邮件正文,有没有正确传递内容?比如应该用管道读取:
    cat /tmp/checkpeers | email -s "SIP中继不可用告警" me@me.com
    
    而不是直接把文件名当参数丢给email命令。

2. 检查脚本的运行环境变量

手动执行命令是在你的个人用户环境,但脚本可能是通过cron或者root用户运行的,环境变量差异会导致命令找不到:

  • 先执行which email找到命令的绝对路径(比如/usr/bin/email),然后在脚本里写全路径调用,避免环境变量找不到命令的问题:
    /usr/bin/email -s "SIP中继告警" me@me.com < /tmp/checkpeers
    
  • 切换到脚本运行的用户(比如sudo -u root bash),手动执行一遍邮件命令,看能不能正常发送——如果切换后发不了,说明该用户的邮件配置有问题。

3. 给脚本加错误日志定位问题

在脚本的邮件发送命令后面加上错误重定向,把执行时的报错信息存下来:

cat /tmp/checkpeers | email -s "SIP中继告警" me@me.com >> /tmp/email_debug.log 2>&1

之后查看/tmp/email_debug.log,里面会有具体的错误提示,比如权限不足、命令不存在、收件人格式错误等,这是最快定位问题的方法。

4. 确认告警触发逻辑是否真的执行了

有时候不是邮件发不出,而是告警根本没被触发:

  • 检查脚本里判断中继不可用的逻辑是不是正确?比如有没有正确解析/tmp/checkpeers里的状态内容,判断条件有没有写反?
  • 手动模拟中继不可用的场景,直接运行脚本,看邮件命令有没有被执行到——比如在脚本里加一行echo "开始发送告警邮件",运行后看这行日志是否输出。

5. 如果用cron定时运行,检查cron的环境和日志

cron的运行环境和用户环境差异很大,容易踩坑:

  • 查看cron日志(通常在/var/log/cron或者/var/log/syslog里搜索cron关键词),看脚本有没有被执行,有没有报错信息。
  • 在脚本开头手动设置环境变量,避免cron默认PATH太窄找不到命令:
    #!/bin/bash
    # 手动设置环境变量
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    # 或者导入用户的环境配置
    source /home/your_user/.bash_profile
    

你可以先从这几个方向排查,要是能把脚本里的邮件相关代码或者错误日志贴出来,能更快精准定位问题。

内容的提问来源于stack exchange,提问作者user313162

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:37:18