0

我们的监控脚本遇到问题。

程序的流程是

  1. 客户 ftp/sftp 文件(.csv 格式)到“源”目录
  2. Bash 脚本将完成的 .csv 文件重命名为 .aaa 文件
  3. 另一个 Bash 脚本将“.aaa”文件移动到“destination”目录并将文件重命名为“.csv”
  4. CAMEL 正在监视“目标”目录。如果任何文件到达“目标”文件夹并且扩展名不等于“.aaa”,它将开始处理该文件。

这里第 3 步失败了。Bash 脚本成功移动文件。但是在将文件从“.aaa”重命名为“.csv”时,CAMEL 会获取文件并开始处理。CAMEL 因错误“页脚不存在”而失败。这是因为“mv”命令未完成,并且在“mv”完成之前已处理 CAMEL。所以它处理了一个不完整的文件。

由于我们使用脚本,因此我们在使用命令方面几乎没有灵活性。我们正在使用 Linux “mv” 命令重命名文件。

有没有办法在重命名时将文件锁定在脚本中,这将阻止 CAMEL 访问它?

还是有更好的方法来处理这种情况?

提前感谢帮助。

谢谢, 马修 Liju

4

3 回答 3

1

你怎么做第3步?

mv foo.aaa dest/foo.csv

或者

mv foo.aaa dest/foo.aaa
mv dest/foo.aaa dest/foo.csv

我认为后者应该是原子的,而如果 origin 和 dest 位于不同的分区/文件系统上,则第一个是副本。

于 2009-12-08T09:50:53.430 回答
0

一个好的提示是始终编写您正在使用的各种产品的版本。

无论如何,Camel 2.x 有 5 个左右不同的 readlock 选项,您可以从中选择来解决这样的问题。如果你有特殊的支持,你可以实现你自己的,例如人们只有在有特殊的 .DONE 文件时才开始阅读文件等。

http://camel.apache.org/file2.html

于 2010-01-29T17:15:38.043 回答
0

我不知道 CAMEL 是什么,但我认为您正在寻找文件系统上的无锁队列机制。Maildir(qmail 的一部分)实现了这样一个无锁邮件传递队列。

你也可以看看周围的inotify

根据您的操作系统和分区布局,需要 cp、mv 或 ln 文件。

于 2009-12-08T10:10:21.407 回答