#!/bin/sh # 通用批量进程检查脚本 - 运行时指定进程名 # 使用方法:./check.sh 进程名 # 示例:./check.sh trap # 示例:./check.sh node_exporter # 示例:./check.sh nginx # ====================== 固定配置 ====================== IP_FILE="ip.txt" SSH_USER="root" SSH_PASS="hp93000" SSH_TIMEOUT=3 # ====================================================== # 检查是否输入进程名 if [ $# -ne 1 ]; then echo "用法:$0 进程名" echo "示例:$0 trap" echo "示例:$0 node_exporter" exit 1 fi PROCESS_NAME="$1" OUTPUT_CSV="进程检查结果_${PROCESS_NAME}.csv" # 安装依赖 if ! command -v sshpass >/dev/null 2>&1; then yum install -y sshpass >/dev/null 2>&1 fi # 清理Windows换行符 sed 's/\r$//' "$IP_FILE" > ip_temp.txt mv -f ip_temp.txt "$IP_FILE" # 写CSV表头 echo "IP地址,IP类型,主机名,系统版本,进程状态" > "$OUTPUT_CSV" echo "===== 开始批量检查【进程:$PROCESS_NAME】=====" # 逐行检查 for IP in $(cat "$IP_FILE"); do IP=$(echo "$IP" | xargs) [ -z "$IP" ] && continue # 判断IPv4/IPv6 if echo "$IP" | grep -q ":"; then TYPE="IPv6" else TYPE="IPv4" fi echo -n "→ $IP " # 远程执行 output=$(sshpass -p "$SSH_PASS" \ ssh -o StrictHostKeyChecking=no \ -o ConnectTimeout=$SSH_TIMEOUT \ -o ConnectionAttempts=1 \ -o UserKnownHostsFile=/dev/null \ $SSH_USER@$IP 2>/dev/null \ "hostname cat /etc/os-release | grep PRETTY_NAME | cut -d'\"' -f2 | head -n1 ps -ef | grep -v grep | grep -i '$PROCESS_NAME' | wc -l") # 解析结果 if [ -z "$output" ]; then hn="SSH超时" os="---" st="不可达" echo " [超时]" else hn=$(echo "$output" | sed -n 1p | xargs) os=$(echo "$output" | sed -n 2p | xargs) cnt=$(echo "$output" | sed -n 3p | xargs) if [ "$cnt" -ge 1 ]; then st="已运行" else st="未运行" fi echo " [$st]" fi # 写入CSV(无乱码) echo "$IP,$TYPE,$hn,$os,$st" >> "$OUTPUT_CSV" done echo -e "\n===== 执行完成 =====" echo "报告:$OUTPUT_CSV" echo "进程:$PROCESS_NAME" echo "总IP:$(wc -l < "$IP_FILE")"