生產環境下,web伺服器大多會做負載均衡,所以有多台機器上跑著同樣的web程式**。如果嚴格按照規範流程上線,即不人為特意更改**,那麼這多台機器上的**一定是一樣的,並不會存在兩台機器同乙個檔案內容不同的情況。本案例的需求就是要檢查兩台機器同乙個檔案的差異,畢竟我們不確定伺服器上的**是否有人為改動過。
具體要求如下:
1)兩台機器a和b,檢查目標目錄為 /data/wwwroot/www.abc.com ,路徑一致;
2)需要過濾 uploads、tmp 兩個目錄,這兩個目錄的檔案不需要對比差異;
3)以a機器上的檔案作為標準,b機器少了檔案和改了檔案需要記錄,多了檔案不用考慮;
4)假設a機器可以免密登入b機器;
5)把有差異和缺少的檔案列表記錄到 /data/change.log 。
#!/bin/bash
##對比兩機器上的檔案差異
#假設b機器ip為192.168.0.110
b_ip=192.168.0.110
dir=/data/wwwroot/www.abc.com
#首先檢查 /tmp/mkd5.list 檔案是否存在,存在的話就刪除掉,避免影響後續操作
[ -f /tmp/md5.list ]
&&rm -f /tmp/md5.list
#把除了uploads和tmp目錄外的其它目錄下的所有檔案全部列出來
cd$dir
find
. \(-path "./uploads*" -o -path "-/tmp*" \) -prune -o -type f > /tmp/file.list
#用while迴圈,求出所有檔案的md5值,並寫入乙個檔案裡
cat /tmp/file.list |
while
read line
do md5sum $line
done
> /tmp/md5.list
#將 /tmp/md5.list 拷貝到b機器
scp /tmp/md5.list $b_ip:/tmp/
#判斷 /tmp/check_md5.sh 檔案是否存在,存在的話就刪除掉
[ -f /tmp/check_md5.sh ]
&&rm -f /tmp/check_md5.sh
#用here document編寫 check_md5.sh 指令碼內容
cat<< eof > /tmp/check_md5.sh
#!/bin/bash
dir=/data/wwwroot/www.abc.com
##注意:這裡的特殊字元都需要脫義,比如反引號和$
cd \$dir
n=\`
wc -l /tmp/md5.list |
awk''\`
for i in \`
seq 1 \$n\`
do file_name=\`
sed -n "\$i"p /tmp/md5.list |
awk''\`
md5=\`
sed -n "\$i"p /tmp/md5.list |
awk''\`
if[ -f \$file_name
]then
md5_b=\`md5sum \$file_name |
awk''\`
if[ \$md5_b
!= \$md5
]then
echo
"\$file_name changed."
fielse
echo
"\$file_name lose."
fidone
> /tmp/change.log
eofscp /tmp/check_md5.sh $b_ip:/tmp/
ssh$b_ip
"/bin/bash /tmp/check_md5.sh"
指令碼中,
1)find命令的 -path 選項類似於shell中的正則匹配,-prune -o 組合在一起使用,會把 -prune前面的匹配排除掉
2)要想比較兩個檔案是否一樣,只需要對比它們的md5值即可。md5sum命令可以求出檔案的md5值
打通兩台機器的ssh功能
1,如果希望打通 a 和 b 兩台機器,則要用相同的使用者賬號打通才行,如都用tscadmin 2,如果希望從 a 機器用tscadmin賬號能拷貝b的資料 tscadmin a scp b home tscadmin filename1 filename2 則 需要在a機器上用tscadmin生成...
測量兩台機器的網路延時
time time t 秒 ftime struct timeb 毫秒 gettimeofday 2 struct timespec 微秒 clock gettime 2 struct timespec 納秒 muduo計時使用的是gettimeofday 2 獲取當前時間此函式在使用者態實現的不存...
兩台機器傳輸秘鑰問題的解決方法
因為公司的伺服器連線是通過xshell公鑰和密碼連線的,今天在ssh分發秘鑰的時候出現了,下面的錯誤 1 2 root iz2ze97cumk8opqm28h8z ssh ssh copy id i root ssh id dsa.pub root 123.56.82.168 p 52808 per...