当前位置:首页 > 操作系统 > 正文内容

Linux渠道mailx发邮件忽然呈现附件ATT00001.bin的状况总结

邻居的猫1个月前 (12-09)操作系统948

现象描绘

最近发现咱们监控作业偶然会宣布带有附件ATT00001.bin的邮件,而大部分时分,它都宣布带有内容的邮件,以脚本mysql_slowlog_monitor.sh来说, 平常会将慢查询剖析陈述放在邮件的正文发给DBA,慢查询剖析陈述的内容放在邮件中,呈现问题的时分,邮件正文没有内容,它只要 一个附件ATT00001.bin

function send_slow_rpt(){
    $PT_QUERY_DIGEST --since=$HOURS  $SLOW_LOG_FILE > $ANALYSIS_RPT_FILE
    rpt_exist_data=`cat $ANALYSIS_RPT_FILE | wc -l `
    
    if [ $rpt_exist_data -gt 2 ]; then
        MAIL_SUBJECT="MySQL slow log report on the `hostname` ($SERVER_IP) at $SLOW_RPT_DATE"
        mailx -s "${MAIL_SUBJECT}" -r ${MAIL_FROM} ${MAIL_TO} < ${ANALYSIS_RPT_FILE}
    fi

}

原因剖析:

剖析后发现原因:pt-query-digest生成的慢查询剖析报表,有些SQL句子里边包括了特别字符^M,它导致mail将运用回车符 (^M, \r) 字符的 非 Unix 文本文件将被视为二进制数据。所以mailx将将其当作附件发送出来,详细请见下面英文,更多详细信息参阅参阅资料[1]

Mailx expects input text to be in Unix format, with lines separated by newline (^J, \n) characters only. Non-Unix text files that use carriage return (^M, \r) characters in addition will be treated as binary data; to send such files as text, strip these characters e. g. by tr -d '\015'

Mailx will, if it encounters unknown / control characters in text input, convert it into an attachment with application/octet-stream mime-type set.

文本文件中一起包括回车符和换行符(即Windows风格的文本文件),mailx会将其视为二进制数据,从而将邮件正文作为附件发送,而不是将其作为邮件正文内容。 Mailx 会将其转换为设置了 application/octet-stream mime 类型的附件。

解决方案

解决方案便是这些特别字符(^M, \r)置换,鉴于此处特别状况,咱们运用指令dos2unix将文本内容格局直接从Windows替换成Unix格局。简略高效。

function send_slow_rpt(){
    $PT_QUERY_DIGEST --since=$HOURS  $SLOW_LOG_FILE > $ANALYSIS_RPT_FILE
    rpt_exist_data=`cat $ANALYSIS_RPT_FILE | wc -l `
    
    if [ $rpt_exist_data -gt 2 ]; then
        # 有些状况,mysql慢查询报表中会呈现特别字符(例如^M),导致邮件内容变成附件ATT00001.bin
        if [ -x /usr/bin/dos2unix ];then
            /usr/bin/dos2unix -k $ANALYSIS_RPT_FILE
        fi
        MAIL_SUBJECT="MySQL slow log report on `hostname` ($SERVER_IP) at $SLOW_RPT_DATE"
        mailx -s "${MAIL_SUBJECT}" -r ${MAIL_FROM} ${MAIL_TO} < ${ANALYSIS_RPT_FILE}
    fi

}
参阅资料 [1]

1: https://access.redhat.com/solutions/2210791

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=620

分享给朋友:

“Linux渠道mailx发邮件忽然呈现附件ATT00001.bin的状况总结” 的相关文章

NFS练习题

NFS练习题

一、使命布景 标题: 1.敞开/nfs/share目录,供给给恣意用户只读查询 2.敞开/nfs/upload目录,供给给172.16.1.0/24网段内的机器上传数据,而且要求约束上传数据映射为nfs-upload用户,uid和gid均为200 3.敞开/home/chaoge目录仅同享给172....

linux返回上一层,linux返回上一层目录

linux返回上一层,linux返回上一层目录

在Linux中,返回上一层目录的命令是 `cd ..`。这个命令会改变当前的工作目录到上一层目录。例如,如果你当前在目录 `/home/user/documents` 中,执行 `cd ..` 命令后,你将返回到 `/home/user` 目录。Linux基础教程:如何返回上一级目录Linux操作系...

windows安全日志,守护系统安全的利器

windows安全日志,守护系统安全的利器

Windows安全日志是记录系统安全审计事件的重要工具,它包含用户验证(如登录、远程访问等)和特定用户在认证后对系统所做的操作。以下是关于Windows安全日志的一些关键信息: 查看Windows安全日志的方法1. 使用事件查看器: 通过Win R键调出运行界面,输入“eventvwr.msc...

linux重启redis,Linux下Redis服务的重启方法详解

linux重启redis,Linux下Redis服务的重启方法详解

在Linux系统上重启Redis服务,通常可以通过以下几种方法来实现:1. 使用`systemctl`命令(如果Redis服务是通过systemd管理的): ```bash sudo systemctl restart redis ``` 或者,如果你想要重启Redis并查看输出,可...

linux查看yum源,什么是yum源?

linux查看yum源,什么是yum源?

在Linux系统中,您可以使用以下命令来查看当前系统使用的YUM源:```bashyum repolist```这个命令会列出所有已启用的仓库,以及它们的ID、名称、状态(已启用或已禁用)和仓库中可用的软件包数量。如果您想查看包括已禁用仓库在内的所有仓库,可以使用:```bashyum repoli...

linux解压zip文件到指定文件夹, 准备工作

linux解压zip文件到指定文件夹, 准备工作

在Linux中,你可以使用`unzip`命令来解压ZIP文件到指定文件夹。以下是一个基本的步骤:1. 打开终端。2. 使用`cd`命令导航到包含ZIP文件的目录。3. 使用以下命令解压ZIP文件到指定文件夹:```bashunzip 文件名.zip d 目标文件夹```这里,`文件名.zip`是你想...