Shell实现服务检查看门程序

最近在项目中碰到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         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

angushine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值