Linux LVM lvs 命令从 cron perl 脚本失败但直接从 cron 运行

标签 linux perl cron lvm

我正在尝试在 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(),我也会遇到同样的失败,但没有输出。

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

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

有什么建议吗???

最佳答案

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

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

关于Linux LVM lvs 命令从 cron perl 脚本失败但直接从 cron 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36520494/

相关文章:

Python:文件在命令行上工作,但不适用于 crontab

cron - 每分钟运行一次 cron 作业,但在特定时间开始

linux - 在 screen 下运行时,当前目录没有出现在标题栏中

python - RHEL6 : Switch Python back to original default version

c++ - Linux C++ 开源库将 Word 文档转换为纯文本

mysql - 带有 DBI 占位符的 Dynamic Multi Insert 用于多组 VALUES

algorithm - 从字典中查找字谜的最有效算法是什么?

java - 带有前后(。*)慢的Java正则表达式

linux - crontab 不能与 wget 一起使用

使用完整路径执行时 Linux 脚本不起作用