commit 96a6369c592ca2284ee852d4df2f9d315a8ad2a5 Author: admin <605696661@qq.com> Date: Tue Jun 2 13:33:01 2026 +0800 添加 ps.sh diff --git a/ps.sh b/ps.sh new file mode 100644 index 0000000..f241fcd --- /dev/null +++ b/ps.sh @@ -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")" \ No newline at end of file