首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么没有在check_flexlm.pl中选中/usr/local/bin/?包含的来源

为什么没有在check_flexlm.pl中选中/usr/local/bin/?包含的来源
EN

Stack Overflow用户
提问于 2018-02-09 23:26:11
回答 1查看 155关注 0票数 0

尽管我有/usr/local/bin/lmstat,但使用Cannot find "lmstat"时,下面的脚本总是失败。

有没有人知道为什么会这样呢?

代码语言:javascript
运行
复制
use strict;
use Getopt::Long;
use vars qw($opt_V $opt_h $opt_F $opt_t $verbose $PROGNAME);
use FindBin;
use lib "$FindBin::Bin";
use lib '/usr/lib64/nagios/plugins';
use utils qw(%ERRORS &print_revision &support &usage);

$PROGNAME="check_flexlm";

sub print_help ();
sub print_usage ();

$ENV{'PATH'}='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin';
$ENV{'BASH_ENV'}='';
$ENV{'ENV'}='';

Getopt::Long::Configure('bundling');
GetOptions
        ("V"   => \$opt_V,   "version"    => \$opt_V,
         "h"   => \$opt_h,   "help"       => \$opt_h,
         "v"   => \$verbose, "verbose"    => \$verbose,
         "F=s" => \$opt_F,   "filename=s" => \$opt_F,
         "t=i" => \$opt_t, "timeout=i"  => \$opt_t);

if ($opt_V) {
        print_revision($PROGNAME,'2.2.1');
        exit $ERRORS{'OK'};
}

unless (defined $opt_t) {
        $opt_t = $utils::TIMEOUT ;      # default timeout
}


if ($opt_h) {print_help(); exit $ERRORS{'OK'};}

unless (defined $opt_F) {
        $opt_F = $ENV{'LM_LICENSE_FILE'};
        unless (defined $opt_F) {
                print "Missing license.dat file\n";
                print_usage();
                exit $ERRORS{'UNKNOWN'};
        }
}
# Just in case of problems, let's not hang Nagios
$SIG{'ALRM'} = sub {
        print "Timeout: No Answer from Client\n";
        exit $ERRORS{'UNKNOWN'};
};
alarm($opt_t);

my $lmstat = $utils::PATH_TO_LMSTAT ;
unless (-x $lmstat ) {
        print "Cannot find \"lmstat\"\n";
        exit $ERRORS{'UNKNOWN'};
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-10 00:42:54

永远不要假设你知道某件事是什么。尝试打印路径以验证它是否如您所想的那样:

代码语言:javascript
运行
复制
unless (-x $utils::PATH_TO_LMSTAT ) {
    print qq/Cannot find "lmstat" at <$utils::PATH_TO_LMSTAT>\n/;
    exit $ERRORS{'UNKNOWN'};
}

如果$utils::PATH_TO_LMSTAT是相对路径(例如lmstat本身),则-x将在当前目录中查找。如果它是一个完整的路径,也许你把字符串弄错了。

请注意,您的选项处理可能不那么笨拙,因为您可以为同一键中的选项指定多个名称:

代码语言:javascript
运行
复制
GetOptions(
        "V|version"    => \$opt_V,
        "h|help"       => \$opt_h,
        "v|verbose"    => \$verbose,
        "F|filename=s" => \$opt_F,
        "t|timeout=i"  => \$opt_t,
        );

Mastering Perl的“安全编程技术”一章讨论了调用外部程序的许多令人头疼的问题。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48709038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档