如何使Perl脚本工作只有在一个副本

任务

有时有必要写入一个Perl脚本,只能运行 如果这同一个剧本不工作。 即, 要保证, 在一个时间点唯一的一个实例,这个脚本。

例如,这可能会出现问题,如果剧本是运行为的皇冠 每一分钟,有时可以运行超过一分钟。

在这里,我们正在谈论的情况下脚本时工作的一个服务器上,你要确保 执行是不会超过一个的实例,脚本上相同的机。

决定

最简单的方法来解决这个问题是使用Perl库 Sys::RunAlone.

图书馆配有Perl,它需要安装此外。

做一个脚本,只能在一个实例,你需要添加 在现有的剧本 use Sys::RunAlone;__END__.

这里是一个例子中的一个脚本,只能在一个实例:

#!/usr/bin/perl

use Sys::RunAlone;

print "working\n";

sleep 10;

__END__

如果你跑这个脚本,它将显示该文本 working 和10秒挂 和等待,然后退出。

如果你打开另一个控制台和剧本是运行试运行,它更多的时间 这个运行将会失败,没有代码从脚本将不可执行:

$ perl script.pl
A copy of 'script.pl' is already running

单元 __END__ 的脚本中是强制性的。 库 Sys::RunAlone 将使用这个 本单元,以便采取洛克。 如果这块是不是和库 Sys::RunAlone连接 脚本不会的工作,屏幕上显示的错误 Add __END__ to end of script 'script.pl' to be able use the features of Sys::RunALone.

其他文章