원격 서버에 있는 파일의 체크섬을 비교하는 데 도움이 필요합니다.

원격 서버에 있는 파일의 체크섬을 비교하는 데 도움이 필요합니다.

연산:

  1. 모든 서버에서 파일/디렉터리의 md5sum 가져오기 [파일에서 서버 목록 및 디렉터리 목록 선택]
  2. 모든 서버의 md5sums 파일을 활성 노드와 비교합니다. [활성 노드는 서버 목록의 임의의 1개 노드일 수 있습니다.]
  3. 보고서 파일의 md5sum이 잘못/일치하지 않습니다.
  4. 잘못된 md5sum이 있는 모든 파일의 마지막 업데이트 시간과 동기화되지 않은 시간을 보고합니다. [논리: 해당 파일의 마지막 수정 시간을 활성 노드의 동일한 파일과 비교]
  5. 파일이 서버에 존재하지 않는 경우 보고합니다.

예상되는 로그 형식:

[Warn]     Node Name: 192.168.1.23 | Out-ofSync-Filename: /home/user2/nginx/Templates/file34 | Last-Modified-Time: 2021-07-19 19:25:37 | Out-Of-sync-Since: 15 minutes
[CRITICAL] Node Name: 192.168.1.23 | Out-ofSync-Filename: /home/user2/nginx/Templates/file34 | Last-Modified-Time: 2021-07-19 19:25:37 | Out-Of-sync-Since: 20 minutes 

내 스크립트 진행 상황:


 ### Defining Server INI files ###
    
    serverList="/home/user1/testdir/server-list"
    filesList="/home/user1/testdir/directory-list"
    
    ### Defining output files for extracting md5sums ###
    
    md5sumofDIR="/home/user1/testdir/directory-md5sum"
    filemd5sum="/home/user1/testdir/file-md5sum"
    
    ### Read Server IP from File ###
    
    for i in $(cat $serverList | awk '{print $3}'); do
     echo $i
    
    done
    
    ### Read File-List from File ###
    
    
    for j in $(cat $filesList | awk '{print $3}'); do
    
     if [[ -d $j ]]; then
        echo "$j is a directory"
         for i in $(cat $serverList | awk '{print $3}'); do
           ssh root@$i "find "$j" -type f -exec md5sum {} \;" >> "$i"
    
         done
    
    
     elif [[ -f $j ]]; then
        echo "$j is a file"
         for i in $(cat $serverList | awk '{print $3}'); do
           ssh root@$i "md5sum $j" >> "$i"
         done
     fi
    
    
    done
    
    ## Finding Active Node with a condition ##
    
    for i in $(cat $serverList | awk '{print $3}'); do
            s1=`ssh root@$i /etc/sysconfig/ha/getactive.sh`
                    if [[ $s1 == "NodeType: Active" ]]; then
                            t1=$i
                    fi
    done
    
    
    
    ## Compare md5sum of Active Node with All Nodes ##
    
    for j in $(cat $serverList | awk '{print $3}'); do
    
            f1=`grep -xvFf $t1  $j | awk '{print $2}'`
    
                    if [[ $f1 == *"/"* ]]; then
                            filestat=$(echo "Node Name: " $j "Out-ofSync-Filename: " $f1)
                            echo $filestat >> final-md5sum
                    fi
    done
    
    #### Calculating Last modifiction time of Inconsistent file ####
    var=`cat final-md5sum`
    
    if [ -n "$var" ]; then
            awk '{print $3, $5}' final-md5sum |
                    while read -r ip path; do
                            (ssh root@"$ip" "stat -c%y $path | cut -d'.' -f1" < /dev/null) >> file-stat
                    done
    fi

더 이상 멈춰서 로그에서 필요한 로그 및 파일 수정 세부 정보를 얻을 수 없습니다. 제 방법이 길거나 다른 방법이 있으면 댓글 부탁드립니다.

관련 정보