探测端口脚本
#!/bin/bash
# 循环使用curl检测xxx服务端口连通性,不通/超时触发日志输出
# 配置参数
TARGET_HOST="192.172.1.2" # 目标主机
TARGET_PORT="9100" # 目标端口
NC_TIMEOUT="5" # curl超时时间(秒)
LOOP_INTERVAL="2" # 循环检测间隔(秒)
LOG_DIR="/tmp/connect_log" # 日志保存目录
LOG_FILE="${LOG_DIR}/nova_connect_$(date +'%Y%m%d').log" # 按日期生成日志文件
# 创建日志目录(不存在则创建)
mkdir -p "$LOG_DIR"
# 脚本启动信息
echo "=== 脚本启动:$(date +'%Y-%m-%d %H:%M:%S') ===" | tee -a "$LOG_FILE"
echo "目标检测:${TARGET_HOST}:${TARGET_PORT}" | tee -a "$LOG_FILE"
echo "NC超时时间:${NC_TIMEOUT}s" | tee -a "$LOG_FILE"
echo "循环间隔:${LOOP_INTERVAL}s" | tee -a "$LOG_FILE"
echo "日志保存路径:$LOG_FILE" | tee -a "$LOG_FILE"
echo "==========================================" | tee -a "$LOG_FILE"
# 无限循环检测
while true; do
# 记录当前时间(含毫秒)
CURRENT_TIME=$(date +'%Y-%m-%d %H:%M:%S')
CURRENT_TIME_MS=$(date +'%Y-%m-%d %H:%M:%S,%3N') # 带毫秒的时间格式(匹配原报错格式)
# 执行nc检测:-z 只检测端口连通性,-v 详细输出,-w 指定超时时间
#nc -zv -w "$NC_TIMEOUT" "$TARGET_HOST" "$TARGET_PORT" > /dev/null 2>&1
curl "${TARGET_HOST}:${TARGET_PORT}" > /dev/null 2>&1
NC_EXIT_CODE=$? # 捕获nc退出码(0=连通,非0=不通/超时)
# 判断检测结果
if [ $NC_EXIT_CODE -ne 0 ]; then
# 不通/超时:输出详细错误日志(模拟原报错格式)
ERROR_LOG="${CURRENT_TIME_MS} - ERROR: TIMEOUT/UNREACHABLE (超过${NC_TIMEOUT}秒) | Target: ${TARGET_HOST}:${TARGET_PORT} | Timeout setting: ${NC_TIMEOUT}s | Error detail: TCPConnectionPool(host='${TARGET_HOST}', port=${TARGET_PORT}): Max retries exceeded (Caused by ConnectTimeoutError/ConnectionRefusedError: 'Connection to ${TARGET_HOST}:${TARGET_PORT} timed out or unreachable.')"
echo "$ERROR_LOG" | tee -a "$LOG_FILE"
else
# 连通:输出普通INFO日志(可按需关闭)
INFO_LOG="${CURRENT_TIME} - INFO: service ${TARGET_HOST}:${TARGET_PORT} 连通正常"
echo "$INFO_LOG" | tee -a "$LOG_FILE"
fi
# 间隔指定时间后继续循环
sleep "$LOOP_INTERVAL"
done
抓包脚本
#!/bin/bash
while true; do
ts=$(date +%Y%m%d_%H%M%S)
timeout 10 tcpdump -i any port 9100 -w "/tmp/9100_${ts}.pcap" > /dev/null 2>&1
sleep 2
done
系统检查脚本
#!/bin/bash
# 系统检查脚本
# 检查系统内核、CPU、内存、负载和进程数
# 使用方法: ./system_checker.sh [log_file]
# 如果指定了日志文件,输出将同时写入日志文件
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 日志相关变量
LOG_FILE=""
LOG_ENABLED=false
# 日志函数
log_init() {
if [ $# -eq 1 ]; then
LOG_FILE="$1"
LOG_ENABLED=true
# 创建日志文件并添加头部
echo "=== 系统检查日志 ===" > "$LOG_FILE"
echo "检查时间: $(date)" >> "$LOG_FILE"
echo "================================" >> "$LOG_FILE"
echo "" >> "$LOG_FILE"
fi
}
# 输出函数 - 同时支持终端输出和日志记录
log_output() {
local message="$1"
local color="$2"
# 终端输出
if [ -n "$color" ] && [ "$color" != "NO_COLOR" ]; then
echo -e "${color}${message}${NC}"
else
echo -e "$message"
fi
# 日志记录(去除颜色代码)
if [ "$LOG_ENABLED" = true ]; then
local clean_message=$(echo "$message" | sed 's/\x1b\[[0-9;]*m//g')
echo "$clean_message" >> "$LOG_FILE"
fi
}
# 检查内核版本
check_kernel() {
log_output "=== 系统内核信息 ===" "$BLUE"
log_output "内核版本: $(uname -r)" "$GREEN"
log_output "系统名称: $(uname -s)" "$GREEN"
log_output "主机名: $(hostname)" "$GREEN"
log_output "架构: $(uname -m)" "$GREEN"
log_output "" "NO_COLOR"
}
# 检查CPU信息
check_cpu() {
log_output "=== CPU信息 ===" "$BLUE"
# CPU型号
if [ -f /proc/cpuinfo ]; then
CPU_MODEL=$(grep "model name" /proc/cpuinfo | head -1 | cut -d':' -f2 | sed 's/^ *//')
CPU_CORES=$(grep "cpu cores" /proc/cpuinfo | head -1 | awk '{print $4}')
CPU_THREADS=$(grep "siblings" /proc/cpuinfo | head -1 | awk '{print $3}')
log_output "CPU型号: $CPU_MODEL" "$GREEN"
log_output "物理核心数: $CPU_CORES" "$GREEN"
log_output "逻辑线程数: $CPU_THREADS" "$GREEN"
fi
# CPU使用率
if command -v top >/dev/null 2>&1; then
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
log_output "当前CPU使用率: ${CPU_USAGE}%" "$GREEN"
fi
log_output "" "NO_COLOR"
}
# 检查内存信息
check_memory() {
log_output "=== 内存信息 ===" "$BLUE"
if [ -f /proc/meminfo ]; then
TOTAL_MEM=$(grep "MemTotal" /proc/meminfo | awk '{print $2}')
FREE_MEM=$(grep "MemFree" /proc/meminfo | awk '{print $2}')
AVAILABLE_MEM=$(grep "MemAvailable" /proc/meminfo | awk '{print $2}')
# 转换单位
TOTAL_GB=$(echo "scale=2; $TOTAL_MEM/1024/1024" | bc -l)
FREE_GB=$(echo "scale=2; $FREE_MEM/1024/1024" | bc -l)
AVAILABLE_GB=$(echo "scale=2; $AVAILABLE_MEM/1024/1024" | bc -l)
USED_GB=$(echo "scale=2; $TOTAL_GB-$FREE_GB" | bc -l)
# 计算使用率
if [ $TOTAL_MEM -gt 0 ]; then
MEM_USAGE_PERCENT=$(echo "scale=1; ($TOTAL_MEM-$AVAILABLE_MEM)*100/$TOTAL_MEM" | bc -l)
else
MEM_USAGE_PERCENT="0.0"
fi
log_output "总内存: ${TOTAL_GB} GB" "$GREEN"
log_output "已使用: ${USED_GB} GB (${MEM_USAGE_PERCENT}%)" "$GREEN"
log_output "可用内存: ${AVAILABLE_GB} GB" "$GREEN"
fi
log_output "" "NO_COLOR"
}
# 检查系统负载
check_load() {
log_output "=== 系统负载 ===" "$BLUE"
if [ -f /proc/loadavg ]; then
LOAD_AVG=$(cat /proc/loadavg)
log_output "负载平均值: $LOAD_AVG" "$GREEN"
# 解释负载
CORES=$(nproc 2>/dev/null || echo "1")
ONE_MIN_LOAD=$(echo $LOAD_AVG | awk '{print $1}')
# 简单判断负载状态
if (( $(echo "$ONE_MIN_LOAD < $CORES" | bc -l) )); then
log_output "负载状态: 正常" "$GREEN"
elif (( $(echo "$ONE_MIN_LOAD < $CORES*2" | bc -l) )); then
log_output "负载状态: 轻度繁忙" "$YELLOW"
else
log_output "负载状态: 高负载" "$RED"
fi
fi
log_output "" "NO_COLOR"
}
# 检查进程数
check_processes() {
log_output "=== 进程信息 ===" "$BLUE"
if command -v ps >/dev/null 2>&1; then
TOTAL_PROCS=$(ps aux | wc -l)
# 减去标题行
TOTAL_PROCS=$((TOTAL_PROCS - 1))
# 获取运行中的进程数
RUNNING_PROCS=$(ps aux | grep -c " R " || echo "0")
SLEEPING_PROCS=$(ps aux | grep -c " S " || echo "0")
log_output "总进程数: $TOTAL_PROCS" "$GREEN"
log_output "运行中进程: $RUNNING_PROCS" "$GREEN"
log_output "睡眠中进程: $SLEEPING_PROCS" "$GREEN"
fi
# 获取系统最大PID
if [ -f /proc/sys/kernel/pid_max ]; then
MAX_PID=$(cat /proc/sys/kernel/pid_max)
log_output "系统最大PID: $MAX_PID" "$GREEN"
fi
log_output "" "NO_COLOR"
}
# 主函数
main() {
log_output "系统检查报告" "$BLUE"
log_output "================" "$BLUE"
log_output "检查时间: $(date)" "$GREEN"
log_output "" "NO_COLOR"
check_kernel
check_cpu
check_memory
check_load
check_processes
log_output "系统检查完成" "$BLUE"
log_output "================" "$BLUE"
# 日志完成提示
if [ "$LOG_ENABLED" = true ]; then
log_output "日志已保存到: $LOG_FILE" "$GREEN"
fi
}
# 确保脚本具有可执行权限
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
# 初始化日志
log_init "$@"
main
fi
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。