You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Bash读取文件并按日期条件触发邮件发送操作?

Linux虚拟机超期提醒Bash脚本实现

前置准备

  • 系统需提前安装邮件发送工具,推荐mailx,CentOS可执行yum install mailx -y安装,Debian/Ubuntu可执行apt install bsd-mailx -y安装
  • 确保服务器网络可以正常发送外部邮件

实现脚本

将以下内容保存为vm_expire_notify.sh:

#!/bin/bash
# 请修改为你的虚拟机记录文件实际路径
VM_RECORD_FILE="/opt/vm_running_record.txt"
# 30天对应的秒数
THIRTY_DAYS_SEC=$((30*24*3600))
# 当前系统时间戳
CURRENT_TS=$(date +%s)

# 逐行读取记录文件
while read -r line; do
    # 跳过空行
    [ -z "$line" ] && continue
    # 提取记录时间和通知邮箱字段
    record_time=$(echo "$line" | awk '{print $1}')
    target_email=$(echo "$line" | awk '{print $5}')
    # 把记录的ISO格式时间转成时间戳,转换失败直接跳过该行
    record_ts=$(date -d "$record_time" +%s 2>/dev/null)
    [ $? -ne 0 ] && continue
    # 计算当前时间和记录时间的差值
    time_gap=$((CURRENT_TS - record_ts))
    # 时间差小于30天则发送提醒邮件
    if [ $time_gap -lt $THIRTY_DAYS_SEC ]; then
        echo "您的虚拟机使用时长已超过5天,请及时关机处理" | mail -s "您的虚拟机已超期" "$target_email"
        echo "已向${target_email}发送超期提醒"
    fi
done < "$VM_RECORD_FILE"

使用方法

  1. 替换脚本中VM_RECORD_FILE的取值为你自己的txt记录文件绝对路径
  2. 给脚本添加执行权限:chmod +x vm_expire_notify.sh
  3. 手动测试执行:./vm_expire_notify.sh
  4. 如需定时自动执行,可添加到crontab,示例每天凌晨1点执行:
    执行crontab -e后添加如下规则:
0 1 * * * /path/to/vm_expire_notify.sh >> /var/log/vm_notify.log 2>&1

注意事项

  • 如果需要配置发件人信息,可编辑/etc/mail.rc添加smtp配置,示例如下:

set from=你的发件邮箱 smtp=smtp.邮箱服务商.com smtp-auth-user=发件邮箱账号 smtp-auth-password=邮箱授权码 smtp-auth=login

  • 正式使用前建议先把发邮件的命令替换为echo打印,确认时间筛选逻辑符合预期后再开启真实发信,避免误发邮件。

内容的提问来源于stack exchange,提问作者user202304

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:54:04