CentOS消息推送故障排查技巧
导读:CentOS消息推送故障排查技巧 一 快速定位路径与日志 明确推送通道类型:是系统级通知(如 wall、cron 邮件、systemd 服务状态),还是应用级推送(如 WebSocket/Swoole、消息队列 RabbitMQ/Kafk...
CentOS消息推送故障排查技巧
一 快速定位路径与日志
- 明确推送通道类型:是系统级通知(如 wall、cron 邮件、systemd 服务状态),还是应用级推送(如 WebSocket/Swoole、消息队列 RabbitMQ/Kafka)。
- 系统日志集中查看:优先用 journalctl 检索服务与内核日志;同时检查 /var/log 下的关键文件(如 messages、secure、cron、maillog)。常用命令:
- 实时查看服务日志:
journalctl -u 服务名 -f - 按时间过滤:
journalctl --since "2025-01-01 10:00:00" --until "2025-01-01 12:00:00" - 查看 cron 日志:
journalctl _COMM=crond --since today或cat /var/log/cron - 查看邮件日志:
tail -n50 /var/log/maillog - 查看系统与安全日志:
cat /var/log/messages、cat /var/log/secure
- 实时查看服务日志:
- 若涉及网络可达性或外部回调,结合 rsyslog 的远程日志能力与集中化平台(如 ELK/Splunk)做统一检索与告警。
二 常见故障场景与处理要点
- cron 任务“No mail”或邮件未送达
- 查 cron 日志确认是否尝试发信:
journalctl _COMM=crond --since today - 查邮件日志定位 MTA 错误:
tail -n50 /var/log/maillog,常见错误如:fatal: parameter inet_interfaces: no local interface for ::1(IPv6 回环未配置)warning: unable to look up public/pickup: No such file or directory(Postfix 队列缺失)
- 处理要点:
- 修正 /etc/hosts 中 ::1 映射或调整 Postfix 的 inet_interfaces 配置;
- 创建缺失的 FIFO:
mkfifo /var/spool/postfix/public/pickup & & chown postfix:postdrop /var/spool/postfix/public/pickup; - 重启 Postfix:
systemctl restart postfix; - 确认本机 MTA(如 Postfix/sendmail)已启用并对外可达。
- 查 cron 日志确认是否尝试发信:
- 消息队列(如 RabbitMQ)发送失败或连接阻塞
- 查服务状态与连接:
systemctl status rabbitmq-server、rabbitmqctl list_connections、rabbitmqctl list_queues - 查磁盘与系统资源:
df -h、iostat -x 1 10(若 %util≈100% 表示 I/O 饱和) - 处理要点:释放磁盘空间(如
yum clean all)、必要时重启服务;磁盘满会导致 broker 阻塞/链接异常,清理后通常可恢复。
- 查服务状态与连接:
- WebSocket/Swoole 推送异常(连接失败、握手失败、消息未下发)
- 核对监听地址与端口(如 0.0.0.0:9502)、TLS 证书路径与权限;
- 查看服务端与客户端日志,复现 wss:// 握手与重连;
- 确保进程以 CLI 常驻运行、守护与自动拉起配置正确(如 systemd 服务)。
三 性能与资源瓶颈排查
- I/O 与磁盘:
- 快速判断:
iostat -x 1 10,关注 %util、await、svctm、r/s、w/s; - 若 %util≈100% 为高负载征兆,结合
iotop/pidstat -d定位进程,必要时用 pt-ioprofile 从吞吐角度定位热点文件/设备。
- 快速判断:
- 系统与服务健康:
- 资源:
top/htop、free -m、df -h; - 日志:
journalctl -p err..alert聚焦高优先级错误; - 队列堆积:在业务侧监控 ready/inflight 消息数与消费延迟,联动扩容消费者或限流。
- 资源:
四 推送频率与定时推送的正确做法
- 使用 wall 广播给已登录用户:
- 示例:
/usr/bin/wall "系统将在5分钟后维护"
- 示例:
- 使用 cron 定时推送:
- 示例:
0 8 * * * /usr/bin/wall "早安通知"(每天 08:00)
- 示例:
- 使用 systemd Timer(更现代、可持久化):
- 服务单元
/etc/systemd/system/notify.service:[Unit] Description=Send scheduled message [Service] ExecStart=/usr/bin/wall "定时消息内容" - 定时器单元
/etc/systemd/system/notify.timer:[Unit] Description=Daily message at 08:00 [Timer] OnCalendar=*-*-* 08:00:00 Persistent=true Unit=notify.service [Install] WantedBy=timers.target - 启用:
systemctl daemon-reload & & systemctl enable --now notify.timer
- 服务单元
- 第三方 Webhook(如 Slack/企业微信):
- 脚本示例:
curl -X POST -H 'Content-type: application/json' --data '{ "text":"消息内容"} ' https://hooks.example.com/TOKEN - 频率控制:在脚本或 cron 中加入速率限制与错误重试(指数退避)。
- 脚本示例:
五 一键排查清单与最小化复现
- 快速检查清单
- 服务与端口:
systemctl is-active 服务名、ss -lntp | grep 端口 - 日志:
journalctl -u 服务名 -b、tail -n100 /var/log/maillog /var/log/cron /var/log/messages - 资源:
df -h、free -m、iostat -x 1 10、top -b -d 1 -n 20 | head - 队列/连接:业务面板或 CLI 查看 connections/queues/ready 与 ack/nack 速率
- 网络与防火墙:
curl -Iv 目标地址、firewall-cmd --list-all
- 服务与端口:
- 最小化复现步骤
- 本地直连目标(如
nc -vz 目标 端口/curl到 Webhook) - 本地回放任务(直接执行脚本或
wall命令) - 逐步排除法:本机→内网→公网;关闭安全策略/代理后再逐项恢复,定位“策略/网络/应用”哪一层阻断。
- 本地直连目标(如
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS消息推送故障排查技巧
本文地址: https://pptw.com/jishu/785480.html
