侧边栏壁纸
博主头像
与晚风述往事博主等级

万般皆下品,唯有读书高。

  • 累计撰写 149 篇文章
  • 累计创建 29 个标签
  • 累计收到 19 条评论

目 录CONTENT

文章目录

MAIL (mailed XXXX 5 bytes of output but got status XXXX)

与晚风述往事
2022-01-07 / 0 评论 / 0 点赞 / 663 阅读 / 2,269 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-01-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

介绍

昨天同事向我反馈了个问题,说在CentOS 7系统上crond服务的日志有报错,让我协助看看。我排查后发现造成此问题的原因可能很普遍,就将排查和解决的步骤记录下来了,方便后续参考。

注意,以下步骤及截图全部来源于我的本地虚拟机。

环境信息

  • CentOS 7操作系统
  • 部署有MySQL数据库

排查

1、排查cron日志文件

在登录到CentOS操作系统后,我首先去查看crond服务的日志文件,确认详细的报错信息。crond服务的默认日志文件是/var/log/cron,由于我这边没做特殊调整,就直接查看此文件即可。如果有特殊原因,修改了默认存储位置,则根据实际位置查询。

[root@localhost ~]# vim /var/log/cron

报错信息如下:
image.png
从上图中可以看到,我的crond服务在17点01分01秒执行了/root/test.sh脚本,执行后就报错了。

2、检查Postfix服务状态

从上面得到的错误信息是“MAIL (mailed 8 bytes of output but got status 0x007f#012)”,翻译过来就是邮寄了8字节的输出信息,但得到的状态是0x007f#012。

看过错误后,我怀疑是postfix服务出现了问题,就去检查postfix服务的状态。

[root@localhost ~]# systemctl status postfix

服务状态如下图:
image.png
从上图看到,的确跟我想的一样,postfix服务启动失败了。由于窗口显示的错误信息太少,所以我就将输出重定向个临时文件。

[root@localhost ~]# systemctl status postfix > temp.log

再次查看temp.log文件。

[root@localhost ~]# vim temp.log

完整错误信息如下图:
image.png
从图中已经确定问题,报错的原因是找不到共享链接库“libmysqlclient.so.18”。

3、再次确定链接库是否存在

虽然已经看到提示是找不到共享链接库,但是我们还是需要再确定一下链接库是不是真的不存在。因为有时候共享链接库找不到并不是因为不存在,而是软链接配置错误或者其他配置错误导致的。

[root@localhost ~]# find / -name libmysqlclient.so.18

image.png
排查后发现的确是没有共享链接库文件。

解决

1、查找共享链接库的提供者

既然我们已经知道postfix服务启动失败是因为“libmysqlclient.so.18”这个共享链接库找不到造成的,那就可以使用命令查询postfix需要的共享链接库,以及共享链接库的提供者。

[root@localhost ~]# yum deplist postfix

image.png
从上图中看到,“libmysqlclient.so.18”这个动态链接库的提供者有两个,一个是mariadb-libs包,另一个是mysql-community-libs-compat包。这两个包一个是mariadb数据库的,一个是mysql数据库的,并且这两个在同一个操作系统上不能共存。CentOS 7默认是mariadb数据库,libs包自然也就是mariadb-libs。假如我们需要安装MySQL数据库,那么肯定会先卸载这个依赖,然后安装mysql的mysql-community-libs-compat依赖。但这里有个问题,安装mysql又不是必须要安装mysql-community-libs-compat依赖,就可能会造成此问题。

2、检查依赖包

获取到共享链接库的依赖名后,我们在当前系统上检查下这两个包是否存在即可。

[root@localhost ~]# rpm -qa | grep mysql-community-libs-compat
[root@localhost ~]# rpm -qa | grep mariadb-libs

image.png
从查询结果来看,没有任何输出,即表示这两个依赖都没有安装。

3、选择依赖

既然这两个依赖都没有安装,那么我就需要选择其中一个来进行安装。如果你的服务器上运行的是mariadb数据库,则你就安装mariadb-libs包;反之,则安装mysql-community-libs-compat包。

注意,如果你的mysql是使用编译安装的,则必须检查目录才能确定mysql是否安装。

[root@localhost ~]# rpm -qa | grep mariadb

image.png

[root@localhost ~]# rpm -qa | grep mysql

image.png
从查询的结果来看,我这里是安装的mysql数据库,所以需要安装mysql-community-libs-compat。

4、安装依赖

如果你的服务器能够访问外网,则直接安装即可,yum会自动匹配你的mysql版本;如果无法访问外网,则需要手动下载rpm包,下载对应mysql版本的依赖包后,上传到服务器安装即可。我这里推荐使用此网站下载依赖:依赖下载地址

[root@localhost ~]# yum install mysql-community-libs-compat

image.png
从图中我们能够看到,安装依赖时,也会提示你postfix需要此依赖。

5、重启postfix服务

我们安装完成依赖后,还需要重启postfix服务才行。

[root@localhost ~]# systemctl restart postfix

6、再次查看postfix服务

重启完postfix服务后,我们再次检查服务的运行状态。

[root@localhost ~]# systemctl status postfix

image.png
从图中可以看到,邮件服务已经正常运行了。

0

评论区