温馨提示×

如何定制CentOS消息提醒

小樊
33
2025-12-09 17:10:33
栏目: 智能运维

定制 CentOS 消息提醒的实用方案

一 通知渠道与适用场景

  • 系统广播:使用 wall 向所有已登录终端推送即时消息,适合维护窗口、紧急通告。
  • 邮件告警:通过 mail/mailxPostfix 发送邮件,适合长期留痕与远程接收。
  • 桌面弹窗:使用 notify-send(GNOME/桌面会话)做可视化提醒,适合本地登录用户。
  • 日志与转发:用 rsyslog 记录与转发日志/告警,便于集中化监控与审计。
  • 第三方 Webhook:对接 Slack/企业微信/钉钉 等,适合团队协作与统一告警通道。

二 快速上手 常用命令示例

  • 系统广播
    • 广播一条消息:sudo wall “系统将在5分钟后维护,请保存工作。”
  • 邮件告警
    • 安装工具:sudo yum install -y mailx
    • 简单发送:echo “磁盘使用率超过80%” | mail -s “【告警】磁盘告警” admin@example.com
    • 使用外部 SMTP(编辑 /etc/mail.rc,示例)
      • set from=“alert@yourdomain.com”
      • set smtp=smtp://smtp.yourserver.com:587
      • set smtp-auth=login
      • set smtp-auth-user=“alert@yourdomain.com”
      • set smtp-auth-password=“YOURPASS”
      • set ssl-verify=ignore
      • set nss-config-dir=/etc/pki/nssdb
  • 桌面弹窗
    • 安装依赖:sudo yum install -y libnotify
    • 发送弹窗:notify-send “标题” “这是一条桌面通知”
  • 写入系统日志
    • 记录告警:logger -t “ALERT” “CPU 使用率超过阈值”

三 进阶定制 日志转发与频率控制

  • 日志转发到远程服务器(rsyslog)
    • 编辑配置:在 /etc/rsyslog.conf/etc/rsyslog.d/ 下添加
      • 远程 UDP:. @192.0.2.10:514
      • 远程 TCP:. @@192.0.2.10:514
    • 应用:sudo systemctl restart rsyslog
  • 按级别分离日志(示例)
    • 将 authpriv 单独记录:authpriv.* /var/log/auth.log
    • 调整主日志级别:*.info;authpriv.none;cron.none /var/log/messages
  • 定时推送消息
    • Cron:0 8 * * * /usr/bin/wall “每日8点例行通知”
    • systemd 定时器(/etc/systemd/system/msg.timer)
      • [Timer] OnCalendar=--* 08:00:00
      • 启用:systemctl daemon-reload && systemctl enable --now msg.timer
  • 邮件投递优化
    • 使用 Postfix 作为 MTA 并配置 relayhost 提高可达性;注意邮件可投递性与反垃圾策略。

四 桌面环境通知与多用户场景

  • GNOME 桌面通知策略
    • 安装 dconf-editor:sudo yum install -y dconf-editor
    • 路径:org → gnome → desktop → notifications,可调整应用通知的显示、声音与持续时间。
  • VNC/X11 多会话弹窗
    • 指定显示与用户:sudo -u alice DISPLAY=:1 notify-send “提醒” “来自后台的提示”
    • 免密执行(visudo):alice ALL=(alice) NOPASSWD: /usr/bin/notify-send
    • 注意:确保会话对应的 DISPLAYDBus 可用(如安装 dbus-x11)。

五 实战模板 磁盘阈值告警脚本

  • 功能:当根分区使用率超过阈值时,记录日志、发送邮件、并弹出桌面通知(在有 GUI 的会话上)。
  • 用法:chmod +x disk_alert.sh;./disk_alert.sh 80
#!/usr/bin/env bash
# 用法: disk_alert.sh <阈值百分比,如 80>
set -Eeuo pipefail

THRESHOLD="${1:-80}"
PART="${2:-/}"
LOGFILE="/var/log/disk_alert.log"
SUBJECT="【磁盘告警】$(hostname): ${PART} 使用率过高"
MSG="在 $(date '+%F %T')${PART} 使用率 ${USAGE}% ≥ ${THRESHOLD}%"

# 获取使用率(去掉百分号)
USAGE=$(df -hP "$PART" | awk 'NR==2 {gsub(/%/,"",$5); print $5}')

if [ "$USAGE" -ge "$THRESHOLD" ]; then
  # 写入系统日志
  logger -t "DISK_ALERT" "$MSG"

  # 发送邮件(确保已配置好 /etc/mail.rc 或 Postfix)
  echo "$MSG" | mail -s "$SUBJECT" admin@example.com || true

  # 尝试桌面通知(忽略无 GUI 的报错)
  for disp in :0 :1 :2; do
    if sudo -u "$(who | awk -v d="$disp" '$5 ~ d {print $1; exit}')" \
         DISPLAY="$disp" DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u "$(who | awk -v d="$disp" '$5 ~ d {print $1; exit}')")/bus" \
         notify-send "磁盘告警" "$MSG" 2>/dev/null; then
      break
    fi
  done 2>/dev/null || true

  echo "$(date '+%F %T') $MSG" >> "$LOGFILE"
fi

提示

  • 无公网或邮件投递受限时,优先使用 日志集中企业 IM Webhook 作为兜底通道。
  • 生产环境建议将告警脚本纳入 systemd 管理并设置 OnFailure 联动,确保可靠执行与告警链路可观测。

0