添加 ps.sh

This commit is contained in:
2026-06-02 13:33:01 +08:00
commit 96a6369c59
+90
View File
@@ -0,0 +1,90 @@
#!/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")"