CentOS系统消息如何实现自动化处理
导读:CentOS系统消息自动化处理实战 一 目标与总体架构 覆盖四类常见“系统消息”:本地终端广播、桌面弹窗、邮件与Webhook远程告警、登录/启动的静态或动态消息。 以rsyslog/journald为日志中枢,配合logrotate做日...
CentOS系统消息自动化处理实战
一 目标与总体架构
- 覆盖四类常见“系统消息”:本地终端广播、桌面弹窗、邮件与Webhook远程告警、登录/启动的静态或动态消息。
- 以rsyslog/journald为日志中枢,配合logrotate做日志轮转,避免磁盘被撑满;需要跨机统一时,将日志远程转发到集中平台(如 ELK/Loki)。
- 自动化手段以cron定时任务、systemd服务钩子与日志触发脚本为主,按“发现→通知→记录/收敛”闭环设计。
二 即时与定时消息
- 终端广播与私聊
- 向所有登录终端广播:echo “【维护通知】22:00-23:00 维护,请保存工作。” | wall
- 向指定用户发送:先通过 who 定位在线用户与 TTY,再用 write 用户名 推送;用 mesg n/y 控制是否接收消息。
- 桌面通知(GNOME/KDE 等)
- 安装依赖:sudo yum install libnotify -y
- 发送弹窗:notify-send “【提醒】” “当前时间 $(date +”%F %T")"
- 定时任务
- 每天 09:00 桌面提醒:0 9 * * * /usr/bin/notify-send “【每日提醒】” “开始一天的工作吧!”
- 每天 18:00 全站广播:0 18 * * * echo “【公告】今晚22:00备份,请避免重要操作。” | wall
- 说明
- 桌面通知仅在图形会话生效;无图形环境可改用 wall/mail/Webhook。
三 日志驱动的自动化告警
- 方案A:journald 实时跟踪 + 触发动作
- 实时跟踪错误并推送(适合前台会话):journalctl -f | grep --line-buffered “ERROR” | while read line; do notify-send “【系统错误】” “$line”; done
- 无图形时改为:将 $line 通过 mailx 或 curl Webhook 发送到邮箱/企业微信/钉钉/Slack/Telegram。
- 方案B:rsyslog 规则触发外部程序
- 在 /etc/rsyslog.d/alert.conf 中写入:if $programname == ‘sshd’ and $syslogseverity == ‘err’ then action(type=“omprog” template=“RSYSLOG_TraditionalFileFormat” binary=“/usr/local/bin/alert.sh”)
- 创建 /usr/local/bin/alert.sh(可执行),读取标准输入并调用 mailx/curl 推送;重启 rsyslog:sudo systemctl restart rsyslog
- 方案C:定时巡检脚本(兜底)
- 每 5 分钟检查 /var/log/messages 中关键字并告警:*/5 * * * * /usr/local/bin/log_monitor.sh
- 脚本示例:grep -qi “ERROR” /var/log/messages & & echo “ERROR detected at $(date)” | mailx -s “系统告警” admin@example.com
- 远程集中
- 单机将日志转发到日志服务器:. @@remote-log-server:514(TCP 更可靠);服务器端启用相应模块并配置接收规则。
四 登录与启动时的自动化消息
- 动态 MOTD(登录欢迎语)
- 在 /etc/update-motd.d/ 下新增脚本(如 99-custom),赋予可执行权限;系统登录时自动渲染输出。
- 示例:#!/bin/sh;echo “欢迎使用 $(hostname),当前时间:$(date)”; uptime
- 静态 MOTD
- 直接编辑 /etc/motd,用户每次登录都会显示该文本。
- 说明
- 上述方式适合公告、合规提示、资源使用概览等“登录即见”的信息。
五 邮件与第三方通知集成
- 邮件告警(mailx + SMTP)
- 安装:sudo yum install mailx -y
- 配置 /etc/mail.rc(示例):set smtp=smtp.yourmailserver.com;set smtp-auth=login;set smtp-auth-user=you@example.com;set smtp-auth-password=****;set from=“you you@example.com”
- 发送:echo “【告警】磁盘剩余 10%” | mailx -s “磁盘告警” admin@example.com
- Webhook 与 IM(Slack/Telegram)
- Slack:curl -X POST -H ‘Content-type: application/json’ --data ‘{ “text”:“【告警】CPU 使用率 > 90%”} ’ https://hooks.slack.com/services/…
- Telegram:curl -s -X POST -H ‘Content-Type: application/json’ --data ‘{ “chat_id”:“YOUR_CHAT_ID”,“text”:“【通知】服务器已重启”} ’ https://api.telegram.org/botYOUR_BOT_TOKEN/sendMessage
- 建议
- 为不同级别(如 ERROR/WARNING)配置不同接收人;Webhook 建议配合“去重/节流”策略,避免风暴。
六 日志轮转与空间治理
- journald 日志
- 查看占用:journalctl --disk-usage
- 保留最近 1 周:journalctl --vacuum-time 1w;或保留最近 100MB:journalctl --vacuum-size 100M
- rsyslog 日志
- 使用 logrotate 管理 /var/log/messages 等:/var/log/messages { daily; rotate 7; compress; missingok; notifempty; create 0640 root adm; sharedscripts; postrotate /bin/kill -USR1 $(cat /var/run/rsyslog.pid 2> /dev/null) || true; endscript }
- 风险提示
- 清理日志前先确认业务与审计需求;避免直接删除正在写入的日志文件,优先使用 logrotate/journalctl 的官方方式。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS系统消息如何实现自动化处理
本文地址: https://pptw.com/jishu/776893.html
