操作:
- すべてのサーバーからファイル/ディレクトリのmd5sumをインポートする[ファイルからサーバーリストとディレクトリリストを選択]
- すべてのサーバーのmd5sumsファイルをアクティブノードと比較します。 [アクティブノードは、サーバーリストの任意の1つのノードにすることができます。]
- レポートファイルのmd5sumが間違って/一致しません。
- 無効なmd5sumを持つすべてのファイルの最後の更新時刻と同期していない時刻を報告します。 [論理:そのファイルの最後の変更時刻をアクティブノードの同じファイルと比較]
- ファイルがサーバーに存在しない場合に報告します。
予想されるログ形式:
[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
停止し、ログから必要なログとファイルの変更の詳細を取得できなくなりました。私の方法が長い場合や他の方法がある場合は、コメントをお願いします。