Perl system() 有时返回 undef

问题描述 投票:0回答:1

我正在使用 Perl 脚本构建一个 Spark-submit 命令,该命令将触发 Hadoop 集群上长时间运行的 Spark 作业,然后使用 system() 执行该命令。有时,system() 返回 undef 而不是正确的返回代码,从而导致逻辑流程不准确,因为 undef == 0 的计算结果为 true。

我当前的代码:

#!/usr/local/bin/perl5.12 -w
#...

my $exitCode = system("$sparkSubmitCmd");
sleep(10);
if ($exitCode == 0) {
    $log->info("$jobName run succeeded.\n");
    #Logic if run succeeded
} else {
    $log->error("$jobName run failed.\n");
    #Logic if run failed
}

在 Spark-submit 启动的底层运行失败后生成此日志:

Argument "" isn't numeric in numeric eq (==) at /usr/local/bfm/etc/SCRIPT_NAME.pl line #.
JOB_NAME run succeeded

# 行指向 $exitCode == 0 if 语句。

这段代码已经工作(并且在 99% 的时间里仍然有效)多年,几乎没有什么问题,并且负责我们的大部分运行,所以我犹豫是否要做出重大改变。

我知道我可以通过在 if 语句中添加 Defined($exitCode) 来切换 undef 的处理方式,但我不想报告误报或误报。这个问题很难重现,因为它只是偶尔发生。我无法确定成功执行是否会返回 undef。

回避报告误报或误报哪个更好的问题,如何完全避免 undef?如果这是不可能的,即使在 undef 的情况下,我如何构建脚本来确定运行状态?

perl spark-submit
1个回答
0
投票

线程或信号处理程序正在崩溃

$?
。可能是 SIGCHLD 信号处理程序。

© www.soinside.com 2019 - 2024. All rights reserved.