2017-09-12 2 views
-1

私は、Webサーバーと通信中に時折誤った動作をするスクリプトを持っています。サーバーがハングアップするか、データの応答が遅くなります。Perlアラーム()またはTime :: Outなし(カーネルなし)SIG

私は現在、スクリプトを終了させるためのハックとして、システムをスレッドで溢れさせないようにしていますが、実際には200個の電子メールを望まないsysadminに警告するcronエラーが発生します。これは、システムが落ちたときに生成されます。

non-OKの終了とそれに対応する電子メールを引き起こさないスクリプト(または必要に応じてapiQuery)を終了する別の方法がありますか?

+4

コードを投稿できますか?そしておそらく解決策を手助けすることができます。 –

+3

か、コードが本当に大きい場合は少なくとも[mcve]を追加してください。 –

+0

(1)はい。 (2)どちらをお望みですか? // Seriosuly、あなたの質問を詳細に記入してください。最初の場所にいくつかのコード。 – zdim

答えて

-1

シグナルハンドラで例外をスローし、別の場所にキャッチすることができます。

my $success = eval { 
    local $SIG{ALRM} = sub { die "Failure" }; 
    alarm 10; 
    do_something_long(); 
    alarm 0; 
    1; 
}; 
if (!$success) { 
    warn "Timeout!\n" if $verbose; 
    exit 0; 
} 
+0

感謝をdone'、私はショットこのあげます。私はそこにSIG {ALRM}を見る。これはまだカーネルアラームを引き起こすでしょうか?それは私が避けようとしていることです。 noobの質問に対する謝罪私はこのperlスクリプトを継承し、私はperlをほとんど知りません。 –

+0

それはシグナルをキャッチするので、あなたのプログラムはそれで死ぬことはありません –

+0

完璧に動作、ありがとう:) –

関連する問題