Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash脚本:检查共享文件是否在另一台服务器上打开_Linux_Bash_File Access - Fatal编程技术网

Linux Bash脚本:检查共享文件是否在另一台服务器上打开

Linux Bash脚本:检查共享文件是否在另一台服务器上打开,linux,bash,file-access,Linux,Bash,File Access,我有3台服务器,s1、s2和d1,其中d1是samba服务器。我的过程是,在s1上运行的脚本生成文件并将其复制到d1,s2然后从d1中提取这些文件并在其上运行一些进程 我的问题是,在s2上,我需要确保s1在拾取文件之前已将文件完全写入d1。这些文件有时很大,因此根据我在s2上的crontab设置,可能会出现重叠,其中s1仍在尝试复制文件,而s2准备拾取文件 我的第一个倾向是使用lsof,但这只告诉我运行命令的服务器正在使用哪些文件,而不是其他服务器是否正在使用该文件。关于如何编写此文件检查脚本有

我有3台服务器,s1、s2和d1,其中d1是samba服务器。我的过程是,在s1上运行的脚本生成文件并将其复制到d1,s2然后从d1中提取这些文件并在其上运行一些进程

我的问题是,在s2上,我需要确保s1在拾取文件之前已将文件完全写入d1。这些文件有时很大,因此根据我在s2上的crontab设置,可能会出现重叠,其中s1仍在尝试复制文件,而s2准备拾取文件


我的第一个倾向是使用lsof,但这只告诉我运行命令的服务器正在使用哪些文件,而不是其他服务器是否正在使用该文件。关于如何编写此文件检查脚本有什么想法吗?

如果您在远程计算机和用户的授权密钥文件中有您的本地计算机和用户的公钥,您可以通过ssh和grep运行lsof以获取文件名

ssh user@host lsof | grep filename
if [ $? -eq 0 ]
    then
        docommand
    else
        dontdoit
fi

那羊群呢?锁定可以在NFS上工作,但老实说,我不知道samba。@FatalError所以你说当s1复制文件时,使用flock锁定文件,以便s2无法访问它?我认为我无论如何都不能使用任何与samba相关的命令,因为这些命令必须从d1开始运行。这是一个可能的解决方案,但从安全角度来看,这是我通常不信任的访问类型之一。无论何时,只要我能够通过ssh连接到需要提供凭据的东西,我总是觉得系统不安全。但我可以更深入地了解这一点,以确保它只有在您使用特定公钥访问特定计算机上的特定帐户,并且该密钥已在目标计算机上注册时才有效。因此,本质上,您的安全就是保护该帐户。从这个角度来看,它和sudo一样安全,但没有提供根帐户。为了进一步锁定它,您可以编辑您的主机允许文件,只允许该计算机(和用户,如果您愿意)连接。