我们的监控脚本遇到问题。
程序的流程是
此处步骤3失败。 Bash脚本成功移动文件。但是,在将文件从“.aaa”重命名为“.csv”时,CAMEL将获取文件并开始处理。 CAMEL失败并显示错误“页脚不存在”。这是因为“mv”命令未完成,并且在“mv”完成之前处理CAMEL。所以它处理了一个不完整的文件。
由于我们使用脚本,因此在使用命令时几乎没有灵活性。我们使用Linux“mv”命令重命名该文件。
在重命名时是否有办法在脚本中锁定文件,这会阻止CAMEL访问它?
或者有更好的方法来处理这种情况吗?
提前感谢帮助。
谢谢, Mathew Liju
答案 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文件等,人们只需要开始阅读文件。