Shell实现服务检查看门程序

发布于:2025-07-23 ⋅ 阅读:(15) ⋅ 点赞:(0)

最近在项目中碰到Kafka自己关闭的事件,为保证Kafka的高效可用,因此考虑使用Shell加系统定时任务检查,保证服务的高可用

检查Zookeeper

#!/bin/bash

# 配置参数
TARGET_PORT=2181                # 监控端口
SERVICE_NAME="zookeeper"        # 服务名称(用于日志记录)
CHECK_INTERVAL=5                # 检测间隔(秒)
LOG_FILE="/data/public/kafka/check.log"

# 获取当前时间戳
timestamp() {
  date "+%Y-%m-%d %H:%M:%S"
}

# 检查端口状态(推荐方法)
check_port() {
  # 使用ss命令检测(兼容性更好)
  sudo ss -tuln | grep -q ":${TARGET_PORT}"
  return $?
}

# 重启服务函数
restart_service() {
  echo "[$(timestamp)] 检测到端口 ${TARGET_PORT} 异常,尝试重启 ${SERVICE_NAME}..." >> $LOG_FILE
  nohup /data/public/kafka/kafka_2.13-2.5.1/bin/zookeeper-server-start.sh /data/public/kafka/kafka_2.13-2.5.1/config/zookeeper.properties > /dev/null 2>&1 &
}

# 主监控逻辑
main() {
  if ! check_port; then
    restart_service
  else
    echo "[$(timestamp)] 端口 ${TARGET_PORT} 正常" >> $LOG_FILE
  fi
}

# 执行主函数
main

检查Kafka

#!/bin/bash

# 配置参数
TARGET_PORT=9092                # 监控端口
SERVICE_NAME="kafka"            # 服务名称(用于日志记录)
CHECK_INTERVAL=5                # 检测间隔(秒)
LOG_FILE="/data/public/kafka/check.log"

# 获取当前时间戳
timestamp() {
  date "+%Y-%m-%d %H:%M:%S"
}

# 检查端口状态(推荐方法)
check_port() {
  # 使用ss命令检测(兼容性更好)
  sudo ss -tuln | grep -q ":${TARGET_PORT}"
  return $?
}

# 重启服务函数
restart_service() {
  echo "[$(timestamp)] 检测到端口 ${TARGET_PORT} 异常,尝试重启 ${SERVICE_NAME}..." >> $LOG_FILE
  nohup /data/public/kafka/kafka_2.13-2.5.1/bin/kafka-server-start.sh /data/public/kafka/kafka_2.13-2.5.1/config/server.properties > /dev/null 2>&1 &
}

# 主监控逻辑
main() {
  if ! check_port; then
    restart_service
  else
    echo "[$(timestamp)] 端口 ${TARGET_PORT} 正常" >> $LOG_FILE
  fi
}

# 执行主函数
main

配置定时任务

[root@server kafka]# crontab -e
# 检查Kafka,2分钟
*/2 * * * * /data/public/kafka/check_kafka.sh
*/2 * * * * /data/public/kafka/check_zookeeper.sh

日志检查

关闭9092端口,然后等待2分钟,检查日志,看是否有重新拉起服务。

[root@server kafka]# cat check.log 
[2025-07-21 10:46:01] 端口 2181 正常
[2025-07-21 10:46:01] 端口 9092 正常
[2025-07-21 10:48:01] 检测到端口 9092 异常,尝试重启 kafka...
[2025-07-21 10:48:01] 端口 2181 正常
[2025-07-21 10:50:01] 端口 2181 正常
[2025-07-21 10:50:01] 端口 9092 正常

经过检查服务均已正常启动

[root@server kafka]# netstat -nltp | grep 9092
tcp6       0      0 10.16.39.121:9092       :::*                    LISTEN      233104/java         
[root@server kafka]# netstat -nltp | grep 2181
tcp6       0      0 :::2181                 :::*                    LISTEN      471696/java         

网站公告

今日签到

点亮在社区的每一天
去签到