如何使用perl或unix命令检查unix文件目录上的活动或缺少活动

如何使用perl或unix命令检查unix文件目录上的活动或缺少活动,perl,shell,unix,Perl,Shell,Unix,场景: 例如,我有一个进程,其中许多文件被Host1、Host2、Host3、Host4复制(scp'd)到DestinationServer。转到同一公共目录:DestinationServer:/home/target。所有文件都是唯一的,因此不会覆盖任何文件。Host1-Host4将有一个cronjob,它将向DestinationServer启动其scp脚本。需要注意的是,主机位于不同的时区和位置。因此,它们将在不同的时间完成 需要: 由于文件正在被scp发送到目的地:/home/tar

场景: 例如,我有一个进程,其中许多文件被Host1、Host2、Host3、Host4复制(scp'd)到DestinationServer。转到同一公共目录:DestinationServer:/home/target。所有文件都是唯一的,因此不会覆盖任何文件。Host1-Host4将有一个cronjob,它将向DestinationServer启动其scp脚本。需要注意的是,主机位于不同的时区和位置。因此,它们将在不同的时间完成

需要: 由于文件正在被scp发送到目的地:/home/target,那么当其他主机的scp完成时,以编程方式检查这些文件的最佳方法是什么

选项: 如果可能的话,我的选择是用perl或shell以编程方式实现这一点

我应该寻找什么,可以使用什么unix命令或perl模块来帮助确定进程何时完成?任何想法,例子都会很棒!谢谢。

使用一种方法:将所有文件复制到临时目录,然后在传输完成后,让原始主机通过ssh执行重命名到目标目录。这样,当文件出现在目标目录中时,您就知道它已完成

我建议这样做是因为如果您只是将scp文件复制到目标目录并以任何方式监视该目录,则无法区分完整传输与中断的scp命令或网络故障。

使用一种方法:将所有文件复制到临时目录,然后,在传输完成后,让发起主机通过ssh对目标目录执行重命名。这样,当文件出现在目标目录中时,您就知道它已完成


我建议这样做是因为,如果您只是将scp文件放入目标目录并以任何方式监视目录,则无法区分完整传输与中断的scp命令或网络故障。

与Jouni类似但可供选择的方法是使用信号量文件。在创建scp文件之前,发起主机会设置信号量文件,完成后,将其删除。所以你们知道,是时候了。

与Jouni相似但可供选择的方法是使用信号量文件。在创建scp文件之前,发起主机会设置信号量文件,完成后,将其删除。所以你知道,是时候了。

是最好的FS观察者-1因为Jouni指出,单独使用观察者会遇到问题。是最好的FS观察者-1因为单独使用观察者会遇到Jouni指出的问题。这取决于您的实现和需要。您可以从目录中询问(例如,使用scp)“*.sem”,如果您得到了sem文件,现在还为时过早,文件仍在发送中。这取决于您的实现和需要。您可以从目录中询问(例如,使用scp)“*.sem”,如果您得到了sem文件,那么现在还为时过早,文件仍然会出现。