Linux Perl:如何查找文件的存在并读取它(如果存在)

系统教程 行业动态 更新时间:2024-06-14 16:59:47
Linux Perl:如何查找文件的存在并读取它(如果存在) - > REALTIME(Linux Perl: How to look for the existence of a file and read it, if it exist -> REALTIME)

有类似的问题,但我所追求的是文件存在的实时检测。

我有2个linux盒子/ PC。

[Linux Box 1] - >生成一个名为host的文件(手动执行)

[Linux Box 2] - >有一个守护进程,每2秒休眠一次,检查预期的文件是否存在。 如果它存在,它将执行我的ssh命令(当然会显示一条文本显示它被执行了bla bla bla)。

PERL SCRIPT:

ctr: if (-e $file) { system ("ssh $script $host.$display"); } sleep(2); goto ctr;

问题问题是,我似乎无法确定文件是否实时存在,即使它已经存在。

方框1

[machine01:/home/machine01]% /MACHINE/TOOLS/perl/app/host_gen > executed at 08/21/2015 21:40:32

方框2

Sleeping for 2 seconds [08/21/2015 21:40:22] Sleeping for 2 seconds [08/21/2015 21:40:24] Sleeping for 2 seconds [08/21/2015 21:40:26] Sleeping for 2 seconds [08/21/2015 21:40:28] Sleeping for 2 seconds [08/21/2015 21:40:30] Sleeping for 2 seconds [08/21/2015 21:40:32] **<-expected execution** Sleeping for 2 seconds [08/21/2015 21:40:34] Sleeping for 2 seconds [08/21/2015 21:40:36] Sleeping for 2 seconds [08/21/2015 21:40:38] Sleeping for 2 seconds [08/21/2015 21:40:40] Sleeping for 2 seconds [08/21/2015 21:40:42] Sleeping for 2 seconds [08/21/2015 21:40:44] Sleeping for 2 seconds [08/21/2015 21:40:46] Sleeping for 2 seconds [08/21/2015 21:40:48] Sleeping for 2 seconds [08/21/2015 21:40:50] Sleeping for 2 seconds [08/21/2015 21:40:52] Sleeping for 2 seconds [08/21/2015 21:40:54] Sleeping for 2 seconds [08/21/2015 21:40:56] Sleeping for 2 seconds [08/21/2015 21:40:58] Sleeping for 2 seconds [08/21/2015 21:41:00] Sleeping for 2 seconds [08/21/2015 21:41:02] Sleeping for 2 seconds [08/21/2015 21:41:04] Sleeping for 2 seconds [08/21/2015 21:41:06] Sleeping for 2 seconds [08/21/2015 21:41:08] Sleeping for 2 seconds [08/21/2015 21:41:10] Sleeping for 2 seconds [08/21/2015 21:41:12] <- It was executed here TYPE_AND_DISPLAY [wkss machine01.ult.ultera.omps.com:0] TYPE [wkss] DISPLAY [machine01.ult.ultera.omps.com:0]

检测现有文件几乎需要一分钟或有时10秒。

这很奇怪。

你们有什么想法我怎么能实现我的目标?

提前致谢。

There are similar questions like this, but what I am after is the real time detection of a file existence.

I have 2 linux box/PC.

[Linux Box 1] -> Generates a file named host (Manually executed)

[Linux Box 2] -> Has a daemon that sleeps every 2 seconds checks if the expected file exist. And if it exist it will execute my ssh command (ofc ourse a bunce of text will show up showing that it was executed bla bla bla).

PERL SCRIPT:

ctr: if (-e $file) { system ("ssh $script $host.$display"); } sleep(2); goto ctr;

THE PROBLEM The problem is, it seems that I can't determine if the file exist real time even though it already exist.

BOX 1

[machine01:/home/machine01]% /MACHINE/TOOLS/perl/app/host_gen > executed at 08/21/2015 21:40:32

BOX 2

Sleeping for 2 seconds [08/21/2015 21:40:22] Sleeping for 2 seconds [08/21/2015 21:40:24] Sleeping for 2 seconds [08/21/2015 21:40:26] Sleeping for 2 seconds [08/21/2015 21:40:28] Sleeping for 2 seconds [08/21/2015 21:40:30] Sleeping for 2 seconds [08/21/2015 21:40:32] **<-expected execution** Sleeping for 2 seconds [08/21/2015 21:40:34] Sleeping for 2 seconds [08/21/2015 21:40:36] Sleeping for 2 seconds [08/21/2015 21:40:38] Sleeping for 2 seconds [08/21/2015 21:40:40] Sleeping for 2 seconds [08/21/2015 21:40:42] Sleeping for 2 seconds [08/21/2015 21:40:44] Sleeping for 2 seconds [08/21/2015 21:40:46] Sleeping for 2 seconds [08/21/2015 21:40:48] Sleeping for 2 seconds [08/21/2015 21:40:50] Sleeping for 2 seconds [08/21/2015 21:40:52] Sleeping for 2 seconds [08/21/2015 21:40:54] Sleeping for 2 seconds [08/21/2015 21:40:56] Sleeping for 2 seconds [08/21/2015 21:40:58] Sleeping for 2 seconds [08/21/2015 21:41:00] Sleeping for 2 seconds [08/21/2015 21:41:02] Sleeping for 2 seconds [08/21/2015 21:41:04] Sleeping for 2 seconds [08/21/2015 21:41:06] Sleeping for 2 seconds [08/21/2015 21:41:08] Sleeping for 2 seconds [08/21/2015 21:41:10] Sleeping for 2 seconds [08/21/2015 21:41:12] <- It was executed here TYPE_AND_DISPLAY [wkss machine01.ult.ultera.omps.com:0] TYPE [wkss] DISPLAY [machine01.ult.ultera.omps.com:0]

It would take almost like a minute or sometimes after 10 seconds to detect the existing file.

Its just weird.

You guys have any idea how could I achieve my goal?

Thanks in advance.

最满意答案

之前的serverfault.com问题:如何判断文件是否在Perl的远程文件系统上?

引用该线程;

默认情况下,大多数NFS客户端缓存目录信息60秒。

该线程中提到的解决方案:

使用noac选项在客户端上挂载NFS共享以禁用属性缓存,或使用acdirmin = 0,acdirmax = 0来禁用目录缓存。

Prior serverfault.com question: How can I tell if a file is on a remote filesystem with Perl?

Quoted from that thread;

By default, most NFS clients cache directory information for 60 seconds.

Solution noted in that thread:

Mount the NFS share on the client with the noac option to disable attribute caching, or use acdirmin=0,acdirmax=0 to just disable directory caching.

更多推荐

本文发布于:2023-04-17 09:17:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/dzcp/7c144684c40ff118ff29d4e7992648f7.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文件   Linux   Perl

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!