90 lines
2.1 KiB
Bash
90 lines
2.1 KiB
Bash
#!/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")" |