1

サーバーを削除するためのアップロード結果ファイルであるシェルスクリプトを実行しています。ある日、ftp サーバーがクラッシュしましたが、誰もそれを知らなかったので、毎日のデータが時間通りに生成されませんでした。

この問題を防ぐために、マネージャーから、アップロード結果を確認し、少し遅れてアップロードするように依頼されました。(1時間ごとに2~3回お試しください。)

質問があります。1. ファイルのアップロードが成功したかどうかを確認するにはどうすればよいですか? 2. ファイルのアップロードを時々再スケジュールするにはどうすればよいですか?

参考までに、私たちのシステムは RHEL5 で実行されており、以下はファイル アップロード コードです。

ftp -n -v ${FTP_HOST} << END_SCRIPT

user ${FTP_USER} ${FTP_PASSWD}

prompt

binary

put  ${REPORT__NAME}.tar.gz

bye

END_SCRIPT
4

1 に答える 1

1

怠惰な(簡単ですが、あまり賢くない)解決策:

  • 1)ファイルのMD5sumを計算します: md5sum ZEFILE > ZEFILE-MD5.txt
  • 2)ファイルをアップロードします:put ZEFILE

リモートサーバーでコマンドを実行できる場合:

  • 3)すぐ後ろに、2番目のコマンド(つまり、最初のコマンドの後でのみ実行されます):put ZEFILE-MD5.txt
  • 4)リモートサーバー上:「ZEFILE」にも「ZEFILE-MD5.txt」が含まれるまで待機し、ファイルが完全にアップロードされていることを示します。次に、ZEFILEのmd5sumをZEFILE-MD5.txtの内容と比較し、ZEFILEが「破損している」ことを警告(メール?)します。

リモートサーバーにアクセスできない場合:

  • 3)別の名前でZEFILEを再度ダウンロードしてみてください。get ZEFILE ZEFILE-from-remote
  • 4)diff ZEFILE ZEFILE-from-remote

また、リモートサーバーに(ある程度)アクセスできる場合は、FTPを使用する代わりに「scpZEFILE user @ destination:/ some /path/」を使用することをお勧めします。

FTPの使用を余儀なくされた場合:expectリモートで送信されたエラーメッセージに「適応」できない静的スクリプトを作成する代わりに使用について読んでください(関連するコマンドを発行する前に適切なプロンプトを待つこともありません)

そして、再スケジュールについて: man at

次のことができます:( echo /path/to/myscript | at now + 3 hours構文を確認してください。数年前にそのマニュアルページを読んだメモリから書き込みます...)(スクリプトはその方​​法で再送信できますが、無限ループに注意してください^^)

これがお役に立てば幸いです(そして誰かが「賢い」アイデアを思いつくことを願っています^^)

于 2013-03-20T19:16:41.210 に答える