CAMEL在“mv”命令完成之前处理文件

时间:2009-12-08 06:41:18

标签: java scripting mv

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

程序的流程是

  1. 客户ftp / sftp文件(.csv格式)为“source”目录
  2. Bash脚本将完成的.csv文件重命名为.aaa文件
  3. 另一个Bash脚本将“.aaa”文件移动到“destination”目录并将文件重命名为“.csv”
  4. CAMEL正在监视“目标”目录。如果任何文件到达“destination”文件夹并且扩展名不等于“.aaa”,它将开始处理该文件。
  5. 此处步骤3失败。 Bash脚本成功移动文件。但是,在将文件从“.aaa”重命名为“.csv”时,CAMEL将获取文件并开始处理。 CAMEL失败并显示错误“页脚不存在”。这是因为“mv”命令未完成,并且在“mv”完成之前处理CAMEL。所以它处理了一个不完整的文件。

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

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

    或者有更好的方法来处理这种情况吗?

    提前感谢帮助。

    谢谢, Mathew Liju

3 个答案:

答案 0 :(得分:1)

你如何做第3步?

mv foo.aaa dest/foo.csv

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

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

答案 1 :(得分:0)

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

您还可以查看inotify周围的所有内容。

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

答案 2 :(得分:0)

一个好的建议是始终写出您正在使用的各种产品的版本。

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

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