0

我想向我作为 Nagios 插件创建的 Perl 脚本添加一些调试日志记录。从命令行启动时它工作得很好,但是当它被 Nagios 调用时,'localtime' 返回上次重新启动 nagios3 守护程序的时间(在这种情况下是昨天下午)。

在 Ubuntu Server 12.04 LTS 上运行 Perl v5.14.2 和 Nagios 3.2.3。

脚本(部分):

#!/usr/bin/perl
use POSIX;

my $result = 0;
my $IP=$ARGV[0];

# actual processing here...

open (LOGFILE, ">>/var/log/nagios3/check_pisystem.log");
print LOGFILE strftime "%F %T%z (%Z)", localtime $^T;
print LOGFILE "," . $IP . "," . $result . "\n";
close (LOGFILE);

运行一段时间后的日志文件内容:10:xx 处的行是通过从 shell 提示符手动启动脚本添加的。其他行是 nagios 调用它的结果,4 个不同的 IP 以 5 分钟的间隔(每个)。

2013-07-29 15:18:24+0200 (CEST),10.3.4.83,0
2013-07-29 15:18:24+0200 (CEST),10.3.3.83,0
2013-07-30 10:24:51+0200 (CEST),10.3.0.83,0
2013-07-29 15:18:24+0200 (CEST),10.3.1.83,1
...
2013-07-29 15:18:24+0200 (CEST),10.3.3.83,1
2013-07-29 15:18:24+0200 (CEST),10.3.1.83,0
2013-07-29 15:18:24+0200 (CEST),10.3.0.83,0
2013-07-29 15:18:24+0200 (CEST),10.3.4.83,0
2013-07-30 10:46:54+0200 (CEST),10.3.0.83,0
4

1 回答 1

1

正如您在评论中提到的那样,问题是您正在传递$^T(保存程序启动的时间)到localtime().

正如您所指出的,您可以说localtime(time)- 甚至更简单,只是不向本地时间传递任何内容 -perldoc -f localtime解释:

If EXPR is omitted, "localtime()" uses the current time (as returned by time(3)).

所以,只要说localtime(),你的问题就会消失 :)

于 2013-07-30T16:33:27.000 回答