当存在来自不同来源的两个文件时,我需要启动一个命令。每个文件都可能在不同的时间到达,但我想在收到两者时触发命令。我试图用 incrond 来做,同时查看 IN_CLOSE_WRITE 和 IN_MOVED_TO 的两个目录
/dir/path1 IN_CLOSE_WRITE,IN_MOVED_TO command
/dir/path2 IN_CLOSE_WRITE,IN_MOVED_TO command
问题是:当第一个手表被触发时,如何等待第二个?
例如:
时间:12:05 UTC - File1 到达 Path1 命令正在等待 Path2 监视
时间:12:09 UTC - File2 到达 Path2 命令启动
该命令是用 Go 编码的,但我找不到任何对我有帮助的东西。
更具体地说,该系统的工作原理如下: 有两个远程服务器在 pcap 中记录数据,时间为 6 小时,时间相同。它们记录相同的信息,但来自不同的 VLAN。录制完成后,将它们上传到主服务器的两个不同目录。两个录音都需要上传才能比较和混合它们,丢弃重复的数据包。录音并不总是以相同的顺序上传,也不会同时到达。这取决于远程服务器和主服务器之间的通信。
文件名总是相同的模式:_yyyymmddTHHMMSS.pcap。例如,文件开始记录 2020-10-15 18:01:00:
文件1:vlan1_20201015T180100.pcap
文件2:vlan2_20201015T180100.pcap
我正在寻找与 incrond 和 bash 相关的解决方案或 Go 中命令中的解决方案。一个解决方案或一个线索,因为我目前处于停滞状态。
我会创建一个由 incrond 调用的包装脚本,例如
这将在每次文件触发 IN_CLOSE_WRITE 或 IN_MOVED_TO 时运行,但仅在两个文件都存在时运行。
更新
根据评论,似乎有必要跟踪上传文件的完成状态。(下面我没测试) 思路是记录上传文件的完成情况,和
使用 lsof 的另一种解决方法。此解决方案必须以 root 身份运行。
根 incrontab
包装脚本