2

我正在尝试在 perl 脚本中运行“lvs”来解析其输出。

my $output = `lvs --noheadings --separator : --units m --nosuffix 2>&1`;
my $result = $?;
if ($result != 0 || length($output) == 0) {
    printf STDERR "Get list of LVs failed (exit result: %d): %s\n",
    $result, $output;
    exit(1);
}
printf "SUCCESS:\n%s\n", $output;

当我从终端窗口运行上述脚本时,它运行良好。如果我通过 cron 运行它会失败:

Get list of LVs failed (exit result: -1): 

注意缺少任何输出(stdout + stderr)

如果我直接在 cron 中运行相同的“lvs --noheadings --separator : --units m --nosuffix”命令,它运行并输出就好了。

如果我修改 perl 脚本以使用 open3() 我也会得到同样的失败,没有输出。

如果我在 lvs 命令中添加“-d -d -d -d -d -v -v -v”以启用详细/调试输出,我会看到当我从终端运行 perl 脚本时,但运行时没有输出通过 cron/perl。

我正在使用 /usr/bin/perl (5.16.3) 在 RHEL 7.2 上运行它

有什么建议么???

4

2 回答 2

3

根据perldoc system,“返回值 -1 表示启动程序失败或 wait(2) 系统调用出错(检查 $! 原因)。 ”所以没有输出的原因是因为lvs没有正在成功启动。

鉴于与 cron 相关的问题的通常性质,我想说它无法运行的最可能原因是它不在$PATHcron. 尝试指定完整路径,如果这不起作用,请检查$!操作系统的错误消息。

于 2016-04-09T19:49:02.500 回答
1

尝试使用绝对路径lvs

my $output = `/sbin/lvs --noheadings --separator : --units m --nosuffix 2>&1`;
于 2016-04-09T19:44:49.250 回答