リモートホストをセットアップするための 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";
、この行をハンドラーの最後の 2 行の間に追加すると、正常に動作します (つまり、 で戻りますexit_code = 1
)。
注:ローカルホストでテストしているので、内部remote_exec
で呼び出すだけです。system($COMMAND)
アップデート
スクリプトの呼び出し方法に関する詳細を追加します。
標準ログを追跡し、終了ステータスをチェックする C++ プログラムからスクリプトを実行します。終了ステータスが0でない場合は、エラーが出力されます。そのため、スクリプトに余分な行を追加するexit
とsystem
、C++ プログラムが出力するエラーが表示されますが、そのような余分な行がない場合、C++ プログラムはスクリプトが正常に終了したことを通知します。つまり、終了ステータスは0です。