我试图在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 -v”以启用详细/调试输出,我会看到从终端运行perl脚本时,但是运行时没有输出通过cron/perl。

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

有什么建议么???

最佳答案

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

考虑到与cron有关的问题的通常性质,我想说它无法运行的最可能原因是它不在$PATH使用的cron上。尝试指定完整路径,如果不起作用,请检查$!以获取操作系统的错误消息。

10-08 08:02