msmtp+smartmontools搭建Ubuntu下硬盘状态自动监控发送邮件
近期又开始折腾了。入手了一个京云小盒子,准备放回老家刷PT。盒子只有2G内存,装完win10 LTSC只剩下400M内存,太危险,没办法,还是用linux吧。我的NAS最基本的就是plex+qb,但毕竟远程操作,及时知道硬盘状态很重要,家里用的stablebit scanner只能在windows下使用,就开始琢磨linux下的方案啦。一如既往,踩够了坑,在整理记录下,希望能对看到的你有所帮助。
1.msmtp
1.1安装msmtp
1 | sudo apt install bsd-mailx msmtp msmtp-mta |
bsd-mailx
这个是本次踩的最大的坑,最小化安装的ubuntu没有自带邮件系统,是没有所有的邮件系统,既没有mail这个命令,也没又系统内置的邮箱,即是说,smartclt即使发送给用户也是收不到的,更不用说向外部发送邮件了。自然msmtp-mta
创建的sendmail
软链接也就成了无根之水。
1.2配置msmtp
全局配置文件在/etc/msmtprc
下,具体配置如下:
1 | # Set default values for all following accounts. |
这里踩的坑是外发邮箱的选择,一开始选了yandex,但这个邮箱的smtp不支持starttls,可以通过tls_starttls off
并设置端口为465解决予以解决,提示证书错可以通过tls_certcheck off
,更恶心的来了,yandex还会监控你的邮件内容,太过简单的内容会被认为是垃圾邮件而拒绝投递。无奈换了hotmail,豁然开朗!所有问题都不是问题了,所以,有时候,选择啊,比努力更重要XD。
1.3解决crontab任务持续报错的问题
这里设置的msmtp是为了让smartmontools发送错误信息,但crontab任务默认会将执行的结果发送给当用户(见crontab -e
时最上边的那一串提示,Output of the crontab jobs (including errors) is sent through email to the user the crontab file belongs to (unless redirected).
),因为没有本地邮件账户,会蹦出来好多错误日志,写入/home/xxx/.msmtp.log
,不够美型。。
解决方法:
执行crontab任务时加上输出后缀即可:
1 | 0 2 * * * /home/backup.sh >/dev/null 2>&1 |
The >/dev/null tells the cron to send all output (STDOUT) to /dev/null
The 2>$1 tells the cron to send all errors (STDERR) to same as (STDOUT)
世界清净了!
1.4有的crontab想发送至本地账户怎么办?
摸索中。。。
2.smartmontools
2.1安装smartmontools
1 | sudo apt install smartmontools |
配置文件在/etc/smartd.conf
,配置重点有两个,
#掉
DEVICESCAN
开头的命令,否则其下的命令都不会执行最上边加入一行
/dev/sda -H -m xxx@hotmail.com
想测试可以在命令后加-M test
,然后sudo systemctl restart smartd
重启服务,看看会不会收到邮件。
如前文提到的,这一步卡了很久,msmtp发送,smartd的配置看起来也很正常,就是发布出去邮件。搜索了很久,受一篇文章启发,利用grep "smartd" /var/log/syslog*
查询日志,发现提示大意是没有mail命令啥的,意识到可能是有些前置问题没解决。。。
再然后,发现安装bsd-mail即可解决,每个用户也有了自己的系统邮箱,输入mail即可查阅,这也是为什么smartd配置文档里-m
后跟的不是邮件地址而是用户名的原因。
另外,配置文件里的建议设置里写的是/dev/sda -H -m root -c 0 -u 0
,-c和-u设置为零意思是不检测pending sectors
和uncorrectable sectors
。。。不知道文档作者是有什么特别的想法。。。至少我看到这俩提示了,还不赶快换硬盘,作死么?
3.参考链接
2.msmtp - ArchWiki (archlinux.org)
3.( msmtp+mutt发送TLS邮件异常处理_Maxi的专栏-CSDN博客
5.14.04 - How to check all S.M.A.R.T. logs location - Ask Ubuntu
6.Configuring mail command to use msmtp - Unix & Linux Stack Exchange–提及bsd-mailx
7.系统运维|使用 smartmontools 查看硬盘的健康状态 (linux.cn)
8.How To Disable Crontab Output and Email Notifications - TecAdmin
9.Shell脚本———— /dev/null 2>&1详解 - Tinywan - 博客园 (cnblogs.com)
10.How to Configure MSMTP for Cron - Jesin’s Blog (websistent.com)