我想定期从远程 FTP 服务器下载数据文件到我的机器。文件下载完成后,我想调用另一个脚本来处理该文件。
我的开发机器是mac os x,最终的部署环境是linux。
详细地:
气象局运行着一个远程公共 FTP 服务器,气象局会在这个服务器上发布包含天气预报的文件。这不是我的机器,我只能从它上面下载。气象局每六个小时在这里发布一个新文件,时间是文件名的一部分。我的机器上会有一个可以处理这些文件中数据的工具。我不是在寻求开发这个工具的帮助。我是在寻求帮助把各个部分拼凑在一起,安排工具的下载和执行。
我想做的事:
每六个小时我想从气象局 ftp 服务器下载新文件。如果失败我想:发送一封电子邮件并重新安排下载。
如果六个小时后下载仍然失败,我想停止尝试获取该文件,因为现在应该有一个具有新名称的新文件。
一旦文件成功下载,我想调用我的工具来处理该文件。如果该工具因文件损坏而失败,它将返回错误,我想重新安排文件的下载
实现这一自动化的标准方法是什么?
我知道我可以使用 cron 来安排 curl 下载并运行一个脚本,该脚本将定期处理下载的文件,并且我知道可以编写一个稍微复杂的脚本或应用程序来执行此操作并添加错误处理、重新安排和发送状态电子邮件。
但是我对这个项目的要求之一是尽可能少地编写自定义代码,而应该尝试使用标准的、久经考验的现有工具,如果必须编写代码,则尝试编写最直接的代码。这样做的原因是代码可能会安装在大量机器上,所有这些机器都需要由不同的人进行调整、定制和维护,在我离开项目很久之后,因此我打算尽可能多地使用文档齐全、支持良好的工具。
这似乎是一项很常见的任务,互联网上一定有很多工具和脚本,是由那些仔细考虑过当您需要定期从远程服务器下载和处理文件时可能出现的所有问题的人编写的,其中包括错误处理、重新安排和发送状态消息。
这就是‘期望’的作用吗?
你会推荐什么?
答案1
嗯,这是一个广泛的、普遍的规范,所以很难做到准确。
所有提供数据的机器都会运行 Linux 吗?如果是这样,也许可以考虑使用同步(或者SCP) 来拉下数据文件,因为这样可以减少对文件传输的大量脚本的需要(并不是说会有很多),并且可能消除对“预期”的需要,而“预期”通常会被意外的消息或事件绊倒。
您没有说下载/传输的文件需要进行什么“处理”,因此很难评论。
重新安排可以由 cron 处理,或者在发生传输错误时,只需读取 rsync 或 scp 的退出状态就足够了。
如何发送状态消息?如果通过电子邮件,那么您可以使用标准命令行'邮件' 命令或有一个可爱的工具可以通过所连接的调制解调器发送短信。
从表面上看,似乎少量的 bash 类型脚本就可以将足够多的标准命令组合在一起来完成您想要的操作,这样您就不需要从其他地方借用代码,但如果您可以详细说明,您可能会得到更多回复。