Shellシナリオの実現は、rsyncデータの転送が完了したかどうかを監視します。


今日はサーバーaがウェブサイトのプログラムを全部別のサーバーbに転送しますが、退勤時間までは1時間しかないです。定時退社のために、簡単にshellのスクリプトを書いて、伝達が完了したかどうかを監視しています。まずサーバaでウェブサイトのプログラムを見たら、合計12 Gです。du-smで調べても11517です。サーバーにはもう人がいません。だから、容量がこれ以上大きくならないと安心できます。
システム:centos 5.x
必要なソフトウェア:rsync
スクリプトの内容:

#!/bin/bash
file=`du -sm /var/www/vhosts/|awk '{print $1}'`
ps=`ps -C rsync --no-header|wc -l`
if [ "$file" = "11517" ];then
echo "files downloaded!"
else
if [ "$ps" = "1" ];then
kill -9 $(ps aux | grep rsync |grep -v grep| awk '{print $2}')
sleep 1
nohup sh /root/rsync.sh &
else
echo "rsync is running..."
fi
fi
シナリオの大まかな考えは、フォルダのサイズがサーバーaと同じ大きさであるかどうかを確認し、違ったら、rsyncのプロセスが実行されているかどうかを確認し、実行していないならkillを落として、rsyncのダウンロードスクリプトを再実行します。
ps:もちろんこの脚本はちょっと地味で、プロセスの状态を调べられませんでした。もしゾンビプロセスが出たら、処理できません。もちろん、ここはもう直しません。みんな自分で修正してもいいです。