2017-10-04 6 views
0

원래 질문에 대한 답변을 얻었으므로 새 질문이 열려 있으므로 주제를 변경하고 싶지 않습니다. 나는 여러 개의 연결 두 개의 별도의 포트에 있지만 같은 IP의쉘 스크립트 같은 IP/포트로 연결이 끊어 질 경우 경고

netstat -an |grep 000 
101.101.101.101:2000  ESTABLISHED 
101.101.101.101:2000  ESTABLISHED 
101.101.101.102:3000  ESTABLISHED 
101.101.101.102:3000  ESTABLISHED 
101.101.101.102:3000  ESTABLISHED 
101.101.101.102:3000  ESTABLISHED 

난 할 노력하고있어 것은 열 1 경우를 인쇄 nestat 및 AWK입니다 함께 오는 모니터링하기 위해 노력하고

1001.1001.1001.1001 : 200은 출력에 경고의 2 배가 아닙니다. 10.1001.1001.1001에 연결이 하나도 누락되었다는 경고가 계속 표시되면

및 10.1001.1001.102 : 3000이 3 조가 존재하더라도 경고한다. 없이 netstat 출력 MES : 여기

는 IP는 실패하지 않도록 경고에 대해 한 번 존재하는 제외한 모든 좋은 내 현재 코드 :

connections=('101.101.101.101' '101.101.101.102') 
running=($(netstat -an |grep 000 |awk '{print $1}')) 
non_running=() 
for process_name in ${connections[@]}; do 
    if [[ "${running[*]}" == *$process_name* ]]; then 
     echo "$process_name is running" 
    else 
     echo "$process_name is not running" 
    fi 
done 

답변

0

난 여전히에 아주 명확하지 않다 요구 사항. 첫 번째 필드는 $process_name이지만 netstat 출력에서는 addr : port 조합이됩니다. 리눅스와 BSD에서 실제 출력은 첫 번째 필드로서 프로토콜을가집니다. 또한 기존 연결만을 찾고있는 것 같지만 netstat의 -a 스위치를 사용하여 수신 대기 소켓을 인쇄하도록합니까?

그래서 당신의 출력을 가정하는 것은 내가 펄이처럼 할 거라고, 위과 같습니다

#!/usr/bin/perl 
use strict; 
use warnings; 

my %minimum = (
    '101.101.101.101:2000' => 2, 
    '101.101.101.102:3000' => 5, 
); 
my %count; 

open my $fh, '-|', 'netstat -an' or die "could not run netstat: $!"; 
while(<$fh>) { 
    next unless /^([0-9.]+:\d+000) /; 
    $count{$1}++; 
} 
close $fh; 

while(my ($ip_port, $min) = each %minimum) { 
    $count{$ip_port} ||= 0; 
    next if $count{$ip_port} >= $min; 
    print "$ip_port: need $min connections, found only $count{$ip_port}\n"; 
} 

당신은 아마 읽기 루프에서 정규 표현식을 적용해야합니다. 내가 활성 TCP 연결 및 프로세스 이름을 얻을 netstat -tpn를 사용하는 것, 그 출력은 다음과 같습니다

tcp  0  0 172.30.252.100:39056 52.216.18.58:80   ESTABLISHED 2000/chrome   
+0

덕분에 @mbethke! 내 시스템에서 실행을 시도하고 아래 오류가 발생했습니다 : 'perlconnections.pl 줄에서 숫자 ge (> =)에 초기화되지 않은 값 사용 19. 병합 (.) 또는 perlconnections.pl의 문자열에서 초기화되지 않은 값 사용 101.101.101.101:2000 : 2 개의 연결이 필요합니다. 발견 된 숫자는 012 (192)입니다. pl 라인 20. 101.101.101.102:3000 : 5 개의 연결이 필요합니다. ' – connollyc4

+0

이 맞습니다. 저는 기존의 연결만을 찾고 있습니다. 필요하지 않습니다. 내 실제 환경에서 나는 네 번째 필드를 찾고 있습니다. 나는 그 질문을 단순화하기 위해 처음 제출했다. 내 netstat는 당신과 비슷합니다 : tcp 0 0 172.30.252.100:39056 52.216.18.58:80 ESTABLISHED 2000/chrome' ' – connollyc4

+0

맞습니다. 연결이 전혀없는 경우를 생각하지 않았습니다. 나는 그것을 막기 위해 선을 추가했다. – mbethke