在CentOS系统中,自定义消息通知可根据接收对象(所有用户、特定用户、管理员)、通知形式(文本广播、桌面弹窗、邮件、第三方应用)和触发条件(手动执行、定时任务、系统事件)选择不同方法。以下是具体实现方案:
wall命令:向所有登录用户广播
适用于紧急系统通知(如维护提醒),无需安装额外工具。
echo "【系统公告】今晚22:00-23:00进行系统升级,届时服务将中断。" | sudo wall
执行后,所有登录终端会同步收到该消息。
write命令:向特定用户发送私信
需知道目标用户的用户名,且对方终端允许接收消息(通过mesg y开启)。
write username "【私人通知】您的备份任务已完成,请查收。"
输入后按Ctrl+D结束发送。
mesg命令:控制消息接收权限
若不想接收他人发送的消息,可禁用:
mesg n # 关闭接收
mesg y # 开启接收(默认状态)
notify-send命令:发送桌面弹窗
依赖libnotify库(默认多数桌面环境已安装),用于本地用户的可视化通知。
sudo yum install libnotify -y # 安装(若未安装)
notify-send -t 10000 "【磁盘预警】" "根分区剩余空间不足10%,请清理!" # -t设置显示时间(毫秒)
zenity命令:创建交互式图形通知
适合需要用户确认的场景(如重启提示),同样依赖桌面环境。
sudo yum install zenity -y
zenity --question --title="重启确认" --text="系统将于5分钟后重启,是否继续?" --ok-label="确认" --cancel-label="取消"
if [ $? -eq 0 ]; then
echo "用户确认重启" | wall
else
echo "用户取消重启" | wall
fi
mailx/postfix配置:发送邮件报警sudo yum install mailx -y
/etc/mail.rc,添加以下内容(替换为你的邮箱信息):set from="yourname@qq.com"
set smtp=smtp.qq.com
set smtp-auth=login
set smtp-auth-user="yourname@qq.com"
set smtp-auth-password="your_authorization_code" # 需到QQ邮箱获取“SMTP授权码”
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
echo "这是一封系统测试邮件" | mailx -s "CentOS通知测试" recipient@example.com
/usr/local/bin/disk_check.sh:#!/bin/bash
THRESHOLD=90 # 磁盘使用率阈值
USAGE=$(df -h / | grep / | awk '{print $5}' | sed 's/%//g')
if [ $USAGE -gt $THRESHOLD ]; then
echo "【磁盘告警】根分区使用率已达${USAGE}%,超过阈值${THRESHOLD}%" | mailx -s "CentOS磁盘空间报警" admin@example.com
fi
添加定时任务(每天9点执行):echo "0 9 * * * /usr/local/bin/disk_check.sh" | sudo tee /etc/cron.d/disk_check
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX)。curl -X POST -H 'Content-type: application/json' --data '{"text":"【CentOS通知】服务器IP:192.168.1.100 磁盘空间不足"}' https://hooks.slack.com/services/your_webhook_url
https://api.telegram.org/bot<YourBOTToken>/getUpdates中查看)。curl -s -X POST -H 'Content-Type: application/json' --data '{"chat_id":"YOUR_CHAT_ID","text":"【CentOS通知】系统更新已完成"}' https://api.telegram.org/botYOUR_BOT_TOKEN/sendMessage
logger命令:记录自定义日志并触发报警
将自定义消息写入系统日志,配合rsyslog或监控工具(如Prometheus)实现联动。
logger -t "CUSTOM_ALERT" "【数据库报警】MySQL服务未响应"
日志会记录到/var/log/messages(默认路径),可通过grep "CUSTOM_ALERT" /var/log/messages查看。
systemd服务:定时或触发式通知
适合需要长期运行的通知任务(如每小时检查服务状态)。
/etc/systemd/system/custom_notify.service:[Unit]
Description=Custom Notification Service
After=network.target
[Service]
ExecStart=/usr/bin/notify-send "系统状态" "所有服务运行正常"
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
sudo systemctl enable custom_notify.service
sudo systemctl start custom_notify.service
/etc/cron.d/custom_notify:0 * * * * root /bin/systemctl start custom_notify.service
以上方法覆盖了CentOS系统从基础到高级的自定义消息通知需求,可根据实际场景组合使用(如用mailx发送邮件报警,用Slack推送团队通知,用wall广播紧急消息)。