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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Set default values for all following accounts.
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /home/xxx/.msmtp.log
#tls_starttls off
#tls_certcheck off

# Yandex
account yandex
host smtp.yandex.com
port 465
from xxx@yandex.com
user xxx
password xxx

# Hotmail
account hotmail
host smtp-mail.outlook.com
port 587
from xxx@hotmail.com
user xxx@hotmail.com
password xxxx

# Set a default account
account default : hotmail

这里踩的坑是外发邮箱的选择,一开始选了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,配置重点有两个,

  1. #掉DEVICESCAN开头的命令,否则其下的命令都不会执行

  2. 最上边加入一行/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 sectorsuncorrectable sectors。。。不知道文档作者是有什么特别的想法。。。至少我看到这俩提示了,还不赶快换硬盘,作死么?

3.参考链接

1.smartd.conf.5.in

2.msmtp - ArchWiki (archlinux.org)

3.( msmtp+mutt发送TLS邮件异常处理_Maxi的专栏-CSDN博客

4.How to configure smartd and be notified of hard disk problems via email - Linux Tutorials - Learn Linux Configuration

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)