1. 向所有登录用户发送广播消息(wall命令)
wall(write all)命令可向当前所有登录终端的用户发送实时广播消息,无需用户主动操作即可接收。
使用方法:通过管道将消息内容传递给wall命令,例如向所有用户发送“系统将于今晚22:00进行维护”的通知:
echo "系统将于今晚22:00进行维护,请保存好工作内容。" | wall
注意事项:消息会强制显示在所有登录用户的终端上,可能影响用户当前操作,建议仅在紧急情况下使用。
2. 发送桌面通知(notify-send命令)
notify-send命令通过桌面通知守护进程(如GNOME的gnome-shell)发送弹出式通知,适合桌面环境用户接收可视化提醒。
前提条件:需安装libnotify库(CentOS默认仓库提供)。
安装命令:
sudo yum install libnotify -y
基本用法:发送带标题和内容的桌面通知,例如提示“磁盘空间不足”:
notify-send "磁盘空间预警" "根分区剩余空间不足10%,请及时清理!"
高级选项:可通过参数调整通知显示时间(-t,单位毫秒)、紧急程度(-u,如low/normal/critical)或图标(-i,指定图标路径):
notify-send -t 10000 -u critical -i /usr/share/icons/gnome/48x48/status/dialog-warning.png "安全警告" "检测到未授权登录尝试!"
注意事项:桌面通知仅在图形界面环境下有效,需确保用户已登录桌面会话。
3. 配置邮件通知(mailx/postfix/esmtp)
通过邮件发送系统通知,适合需要留存记录或远程接收的场景(如服务器异常报警)。
常用工具:mailx(轻量级命令行邮件客户端)、postfix(邮件传输代理)。
以mailx为例的配置步骤:
sudo yum install mailx -y
/etc/mail.rc文件,添加以下内容(以QQ邮箱为例,需开启SMTP服务并获取授权码):set from="your_email@qq.com" # 发件人地址
set smtp=smtp.qq.com # SMTP服务器地址
set smtp-auth=login # 认证方式
set smtp-auth-user="your_email@qq.com" # SMTP用户名(同发件人)
set smtp-auth-password="your_authorization_code" # SMTP授权码(非邮箱密码)
set ssl-verify=ignore # 忽略SSL证书验证(可选,解决自收证书问题)
echo "这是一封系统测试邮件" | mail -s "测试通知" recipient@example.com
注意事项:需确保SMTP服务器允许第三方客户端连接(如QQ邮箱需开启“IMAP/SMTP服务”),并妥善保管授权码。
4. 结合系统日志发送通知(journalctl/systemd-cat)
通过systemd的日志系统捕获特定日志(如错误、警告),并触发通知(如桌面提醒或邮件)。
基本用法:
ERROR级别消息,实时推送桌面通知:journalctl -f | grep --line-buffered "ERROR" | while read line; do notify-send "系统错误" "$line"; done
logger命令将消息写入系统日志,再配置rsyslog转发到邮件(需提前配置rsyslog的邮件转发规则)。grep "ERROR"),避免过多无关通知干扰。5. 第三方通知服务(Slack/Telegram Bot)
通过第三方即时通讯工具的Webhook或API发送通知,适合需要集成到现有协作流程的场景(如团队监控报警)。
以Slack为例的配置步骤:
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX)。send_to_slack.sh,内容如下:#!/bin/bash
MESSAGE="[$(date '+%Y-%m-%d %H:%M:%S')] $1"
curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$MESSAGE\"}" https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
chmod +x send_to_slack.sh
./send_to_slack.sh "服务器CPU温度过高,请检查散热情况!"
以Telegram为例的配置步骤:
@userinfobot获取自己的Chat ID。send_to_telegram.sh,内容如下:#!/bin/bash
MESSAGE="[$(date '+%Y-%m-%d %H:%M:%S')] $1"
curl -s -X POST -H 'Content-Type: application/json' --data "{\"chat_id\":\"YOUR_CHAT_ID\",\"text\":\"$MESSAGE\"}" https://api.telegram.org/botYOUR_BOT_TOKEN/sendMessage
chmod +x send_to_telegram.sh
./send_to_telegram.sh "系统检测到磁盘空间不足,请及时清理!"
注意事项:需确保服务器能访问第三方服务的API地址(如Slack的hooks.slack.com),避免因网络问题导致通知失败。
6. 定时发送消息(cron/systemd定时器)
通过定时任务定期发送消息,适合周期性提醒(如每日备份完成通知、每周系统状态报告)。
使用cron的步骤:
crontab -e
30 8 * * * /usr/bin/notify-send "每日系统检查" "系统检查已完成,未发现异常。"
/etc/systemd/system/daily-reminder.service):[Unit]
Description=Daily System Reminder
[Service]
ExecStart=/usr/bin/notify-send "每日系统检查" "系统检查已完成,未发现异常。"
/etc/systemd/system/daily-reminder.timer):[Unit]
Description=Run daily system reminder at 8:30 AM
[Timer]
OnCalendar=*-*-* 08:30:00
Persistent=true # 若错过时间,下次启动时补发
[Install]
WantedBy=timers.target
systemctl daemon-reload
systemctl start daily-reminder.timer
systemctl enable daily-reminder.timer
注意事项:cron适合简单的定时任务,systemd定时器功能更强大(如支持依赖、精确时间控制),推荐在较新版本的CentOS中使用。