我有一个用于设置远程主机的 perl 脚本。这是它的中断处理程序,以防万一出现问题:
sub interrupt
{
$SIG{'__DIE__'} = '';
my $signal = shift;
print STDERR "Error $SELF_NAME: Bootstrapping of host '$REMOTE_HOST' is interrupted with error '$signal', deleting remote temporary directory $REMOTE_TEMP_DIR.\n";
remote_exec("perl -e \"use File::Path; rmtree('$REMOTE_TEMP_DIR');\"", $REMOTE_HOST, $REMOTE_EXEC_METHOD, $REMOTE_EXEC_PORT, $USERNAME, $PASSWORD, 0, 1);
exit 1;
}
并且这个处理程序总是在需要时被调用。所以我可以在STDERR
. 但是exit 1;
没有被调用并且脚本返回exit_code = 0
. 但是print STDERR "After remote_exec and before exit";
,如果我在处理程序的最后两行之间添加这一行,它工作正常(即返回exit_code = 1
)。
注意:当我在本地主机上测试它时,remote_exec
只需在内部调用。system($COMMAND)
更新
添加有关如何调用脚本的一些详细信息:
我从我的 C++ 程序运行脚本,该程序跟踪其标准日志并检查退出状态,如果退出状态不等于0,它会打印一些错误。因此,当我在脚本之间添加一些额外的行时,exit
我system
可以看到我的 C++ 程序打印的错误,但是如果没有这样的额外行,C++ 程序会告诉脚本已成功退出,这意味着退出状态为0。