我想将一些调试日志记录添加到我作为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);
运行一段时间后的日志文件内容:通过从shell提示符手动启动脚本来添加10:xx的行。其他行是由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
答案 0 :(得分:1)
正如您在评论中所述,问题是您将$^T
(保存程序的时间)传递给localtime()
。
正如您所说,您可以说localtime(time)
- 或者更简单,只需将任何内容传递给当地时间 - perldoc -f localtime
解释:
If EXPR is omitted, "localtime()" uses the current time (as returned by time(3)).
所以,只要说localtime()
,你的问题就会消失:)