如何检查文件是否已成功上传&有时在shell脚本上重试上传?

时间:2013-03-20 17:53:21

标签: shell ftp rhel5

我正在运行shell脚本,它是上传结果文件以删除服务器。 有一天,ftp服务器崩溃但没有人不知道,因此不会按时生成每日数据。

为防止出现此问题,我的经理要求我检查上传结果,并尝试暂停上传。 (每小时尝试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

1 个答案:

答案 0 :(得分:1)

懒惰(简单但不是很聪明)的解决方案:

  • 1)计算文件的MD5sum:md5sum ZEFILE > ZEFILE-MD5.txt
  • 2)上传文件:put ZEFILE

如果可以在远程服务器上运行命令:

  • 3)紧随其后,第二个命令(所以它只在第一个命令之后运行):put ZEFILE-MD5.txt
  • 4)在远程服务器上:它等到&#34; ZEFILE&#34;还有一个&#34; ZEFILE-MD5.txt&#34;有了它,显示文件可能已完全上传。然后,IT将ZEFILE的md5sum与ZEFILE-MD5.txt的内容进行比较,并警告您(邮件?)ZEFILE是否已损坏&#34;

如果您无法访问远程服务器:

  • 3)尝试使用其他名称get ZEFILE ZEFILE-from-remote
  • 再次下载ZEFILE
  • 4)diff ZEFILE ZEFILE-from-remote

我还建议,如果你有(某些)访问远程服务器,使用&#34; scp ZEFILE user @ destination:/ some / path /&#34;使用FTP的人。

如果被迫使用FTP:请阅读使用expect而不是编写一个无法适应的静态脚本。远程发送错误消息(在发出相关命令之前也不等待正确的提示)

关于重新安排:man at

你可以这样做:echo /path/to/myscript | at now + 3 hours(请检查语法,写几年前阅读该手册页的内存......)(脚本可以通过这种方式重新提交,但要注意无限循环^^)

我希望这会有所帮助(并且有人提出了一个&#34;聪明的&#34;想法^^)