Bash
1 前言
一个问题,一篇文章,一出故事。
笔者生产中的smtp服务器最近因为负载均衡器的路由故障而导致服务中断,本着尽快响应的原则,我们需要加强对smtp服务的监控。
如果你需要了解该集群的搭建,请参阅如下章节,
2 最佳实践
2.1 创建备份脚本
mkdir ~/scripts/ vim ~/scripts/smtpCheck.sh
加入如下配置,
#!/bin/bash tigaseAppID="10086" tigaseAppPassword="*********" tigaseEmployeeID="will,jeff" tigaseApiURL="https://tigase.cmdschool.org:8092/tigase/pushText" logFile="/var/log/smtpCheck.log" smtpHost="smtp.cmdschool.org" smptPort="25" maxFails=3 failCount=0 for i in $(seq 1 $((maxFails + 2))); do nc -z -w 5 $smtpHost $smptPort &> /dev/null if [ $? != 0 ]; then ((failCount++)) fi done if [ $failCount -ge $maxFails ]; then tigaseMessageBody="$smtpHost:$smptPort connection failed.%0d%0aEvent date:"$(date +'%Y.%m.%d') curlData="appId=$tigaseAppID&password=$tigaseAppPassword&employee_id=$tigaseEmployeeID&body=$tigaseMessageBody" logMessageBody=$(date +'%Y-%m-%d %H:%M:%S')" $smtpHost:$smptPort connection failed." curl -X POST -d "$curlData" "$tigaseApiURL" &> /dev/null echo "$logMessageBody" | tee -a "$logFile" fi exit 0
– 参数“tigaseAppID”定义消息软件的应用号ID,范例为”10086″
– 参数“tigaseAppPassword”定义消息软件的应用号密码,范例为”*********”
– 参数“tigaseEmployeeID”定义消息软件中的员工工号,范例为”will”和“jeff”,使用逗号分隔
– 参数“tigaseApiURL”定义消息软件的接口地址,范例为”https://tigase.cmdschool.org:8092/api/pushText”
– 参数“logFile”定义错误日志的路径,范例为”/var/log/smtpCheck.log”
– 参数“smtpHost”定义smtp服务器的地址,范例为”smtp.cmdschool.org”
– 参数“smptPort”定义smtp服务器的端口,范例为”25″
– 参数“maxFails”定义测试错误的最大次数,范例为”3″次
2.2 创建脚本触发
crontab -e
加入如下配置,
*/1 * * * * sh ~/scripts/smtpCheck.sh
基于以上脚本运行后,如果符合条件,消息软件将收到如下警告消息,
smtp.cmdschool.org:25 connection failed. Event date:2024.08.28
没有评论