rcpコマンドでサーバ間の同期処理をする簡易ジョブネット
「サーバ2〜サーバ5が並列にいろんな処理をした後でサーバ1に向けてファイルを転送し、全ファイルを受信し終えたところでそれらをマージする」ということがやりたかったんだけど、受信側ではファイルがちょっとずつ書き込まれていくのでいつ完了したかを知る方法がない。なので少し考えて次のようにしてみた。
#!/usr/bin/ksh # (いろんな処理) # 送り側のサーバ2(3,4,5は同様なので省略) rcp file2.dat server2:${受け側のディレクトリ} # 転送したい大きなファイル touch file2.flg rcp file2.flg server2:${受け側のディレクトリ} # 空ファイルを最後に転送
#!/usr/bin/ksh # (いろんな処理) # 受け側のサーバ1はサーバ2〜5から.flgファイルが送られてくるのを待ち受ける # .flgファイル存在すれば.datファイルは既に転送完了したということ while ([ ! -f file2.flg ] || [ ! -f file3.flg ] || [ ! -f file4.flg ] || [ ! -f file5.flg ] ) ; do # 1秒経過するごとに「.」を出力 sleep 1; echo ".\c" done # .flgファイルが揃ったところで刈り取る rm ${受け側のディレクトリ}/file?.flg # 後続のマージ処理 sort -u file?.dat > merged_file.dat
この要領でサーバ間の同期を取ってやれば簡易ジョブネットになる。まぁ、処理途中で異常終了しちゃった場合にどうやって復旧するのかあんまり考えていないわけだけど。