centos

centos crontab如何发送邮件通知

小樊
43
2025-07-02 20:38:49
栏目: 智能运维

在 CentOS 系统中,使用 crontab 定时任务执行脚本或命令时,有时需要发送邮件通知以确认任务是否成功执行。以下是实现这一功能的详细步骤:

1. 确保系统已安装并配置邮件发送工具

CentOS 默认可能未安装邮件发送工具。常用的邮件发送工具有 mailxsendmail。这里以 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/

注意:

2. 编写要执行的脚本

假设你有一个脚本 /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

3. 配置 crontab 定时任务

编辑当前用户的 crontab 配置:

crontab -e

添加如下一行,设置定时任务。例如,每天凌晨 2 点执行脚本:

0 2 * * * /usr/local/bin/my_script.sh >> /var/log/my_script_cron.log 2>&1

说明:

4. 测试邮件发送功能

手动执行脚本,确认邮件是否成功发送:

/usr/local/bin/my_script.sh

检查收件箱或垃圾邮件箱,确认是否收到通知邮件。

5. 高级配置(可选)

使用 sendmail 发送邮件

如果更倾向于使用 sendmail,可以进行如下配置:

  1. 安装 sendmail

    sudo yum install sendmail sendmail-cf -y
    
  2. 配置 /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
    
  3. 生成 sendmail.cf

    m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
    
  4. 重启 sendmail 服务:

    sudo systemctl restart sendmail
    
  5. 修改脚本使用 sendmail 发送邮件:

    #!/bin/bash
    
    # 脚本内容
    echo "这是脚本执行日志..." >> /var/log/my_script.log
    
    # 发送邮件
    echo "Subject: 任务通知" | sendmail recipient@example.com
    

使用第三方邮件服务

如果不想在服务器上配置 SMTP,可以使用第三方邮件服务如 sendgridmailgun 等。这些服务通常提供 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

6. 注意事项

通过以上步骤,你可以在 CentOS 系统中使用 crontab 定时任务执行脚本,并在任务完成后发送邮件通知,从而实现对任务执行的监控和管理。

0
看了该问题的人还看了