在 CentOS 系统中,使用 crontab
定时任务执行脚本或命令时,有时需要发送邮件通知以确认任务是否成功执行。以下是实现这一功能的详细步骤:
CentOS 默认可能未安装邮件发送工具。常用的邮件发送工具有 mailx
和 sendmail
。这里以 mailx
为例进行说明。
mailx
sudo yum install mailx -y
编辑 /etc/mail.rc
或用户主目录下的 .mailrc
文件,配置 SMTP 服务器信息。例如,使用 Gmail 作为 SMTP 服务器:
set smtp=smtp.gmail.com:587
set smtp-auth=login
set smtp-auth-user=your_email@gmail.com
set smtp-auth-password=your_password
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
注意:
假设你有一个脚本 /usr/local/bin/my_script.sh
,需要在执行后发送邮件通知。
#!/bin/bash
# 脚本内容
echo "这是脚本执行日志..." >> /var/log/my_script.log
# 发送邮件
echo "脚本执行完毕。" | mailx -s "任务通知" recipient@example.com
确保脚本具有可执行权限:
chmod +x /usr/local/bin/my_script.sh
crontab
定时任务编辑当前用户的 crontab 配置:
crontab -e
添加如下一行,设置定时任务。例如,每天凌晨 2 点执行脚本:
0 2 * * * /usr/local/bin/my_script.sh >> /var/log/my_script_cron.log 2>&1
说明:
0 2 * * *
表示每天凌晨 2 点执行。>> /var/log/my_script_cron.log 2>&1
将标准输出和错误输出重定向到日志文件,便于排查问题。手动执行脚本,确认邮件是否成功发送:
/usr/local/bin/my_script.sh
检查收件箱或垃圾邮件箱,确认是否收到通知邮件。
sendmail
发送邮件如果更倾向于使用 sendmail
,可以进行如下配置:
安装 sendmail
:
sudo yum install sendmail sendmail-cf -y
配置 /etc/mail/sendmail.mc
,添加 SMTP 服务器信息:
define(`SMART_HOST', `smtp.gmail.com')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
define(`confAUTH_OPTIONS', `A p')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
生成 sendmail.cf
:
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
重启 sendmail
服务:
sudo systemctl restart sendmail
修改脚本使用 sendmail
发送邮件:
#!/bin/bash
# 脚本内容
echo "这是脚本执行日志..." >> /var/log/my_script.log
# 发送邮件
echo "Subject: 任务通知" | sendmail recipient@example.com
如果不想在服务器上配置 SMTP,可以使用第三方邮件服务如 sendgrid
、mailgun
等。这些服务通常提供 API,可以通过脚本调用发送邮件。
示例:使用 curl
调用 SendGrid API 发送邮件
首先,获取 SendGrid API 密钥并设置环境变量:
export SENDGRID_API_KEY='your_sendgrid_api_key'
然后,修改脚本如下:
#!/bin/bash
# 脚本内容
echo "这是脚本执行日志..." >> /var/log/my_script.log
# 发送邮件
curl -X POST -H "Authorization: Bearer $SENDGRID_API_KEY" -H "Content-Type: application/json" -d '{
"personalizations": [
{
"to": [
{
"email": "recipient@example.com"
}
],
"subject": "任务通知"
}
],
"from": {
"email": "your_email@example.com"
},
"content": [
{
"type": "text/plain",
"value": "脚本执行完毕。"
}
]
}' https://api.sendgrid.com/v3/mail/send
通过以上步骤,你可以在 CentOS 系统中使用 crontab
定时任务执行脚本,并在任务完成后发送邮件通知,从而实现对任务执行的监控和管理。