加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 我的Linux守护程序如何知道Windows程序何时停止编写我通

发布时间:2020-12-16 06:28:39 所属栏目:大数据 来源:网络整理
导读:我正在开发一个与USPS运输包名为Dazzle的系统.该系统的一部分包括一个监视守护进程,其目的是获取制表符分隔的值文件,将它们转换为Dazzle识别的 XML,并将它们传递给Dazzle以生成标签.这部分工作得很好.但是,我还想要解析Dazzle生成的输出文件并将其导入数据库
我正在开发一个与USPS运输包名为Dazzle的系统.该系统的一部分包括一个监视守护进程,其目的是获取制表符分隔的值文件,将它们转换为Dazzle识别的 XML,并将它们传递给Dazzle以生成标签.这部分工作得很好.但是,我还想要解析Dazzle生成的输出文件并将其导入数据库.

请注意,Dazzle在Windows上运行.我的监控守护进程是用Perl编写的,可以在Linux上运行.我的Linux系统通过Samba安装了Dazzle的输入和输出目录.

Dazzle开始写入输出文件的时间和完成的时间之间存在可测量的延迟.我想知道的是我如何等待Dazzle完成输出文件的编写?我已经尝试打开文件并对其进行flock($fh,LOCK_SH),但这似乎没有任何好处.

编辑:我有一个基于“mobrule”的评论的想法如下. Dazzle用XML编写输出文件.货件中的每个包装都包含在标签中,整个文件都包含在标签中.所以,如果我在文件完成之前就开始阅读文件,我可以在采取行动之前等待合适的结束标记.

另外,我应该提一下我目前正在做的事情.当我检测到已创建输出XML文件时,我尝试解析它.如果解析失败,我会睡觉并再试一次.如果失败了,我会睡两次,然后再试一次,依此类推.这在64秒超时的测试中运行良好.

解决方法

没有通用和可移植的方法来判断某个进程是否有某个任意文件的打开文件句柄.你必须根据当地的情况做出判断.

在这种情况下,可以在Windows机器上查询进程表以查看“Dazzle”程序是否仍在运行.或者,您的经验可能会为您提供其他指导,例如“当输入合理时,Dazzle永远不会超过20秒运行”或“Dazzle运行时,它每隔几秒钟更新一次文件.如果文件尚未更新比方说,10秒,那么Dazzle很有可能完成.“

但你不一定要等到Dazzle完成.在Dazzle写入它的同时读取文件是完全可以的 – 请参阅the perldoc for the seek function,注意关于“如何模拟tail -f”的部分.然后,您可以在Dazzle运行时更新数据库.

这样,如果你对Dazzle完成时的猜测过于保守,你的数据库仍然会及时更新,唯一的代价就是在EOF文件句柄上进行一些无用的搜索和读取调用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读