0

Windows 2003 R2 および 2008 でタスク スケジューラを使用してスケジュールされた perl スクリプトがいくつかあります。これらのスクリプトは、perl.exe を使用して、またはバッチ ファイルを介して直接呼び出されます。

これらのスクリプトは実行に失敗する場合があり (クラッシュする可能性があります)、これらのクラッシュについては認識していません。

これらのスクリプトがクラッシュしたときにメールを送信する方法はありますか? 多かれ少なかれ、これらのスクリプトの監視に似ています

前もって感謝します

カーシック

4

3 に答える 3

1

プラグインで自分自身を監視できるのに、外部からスクリプトを監視する必要はありません。まず、エラーをキャッチするためにevalを使用できます。エラーが発生した場合は、rpg が提案するようにNet::SMTP モジュールを使用して電子メールを送信できます。ただし、エラーの直前に起こったこととエラーの原因を追跡するために、ある種のログ ファイルを使用することを強くお勧めします。あなたの主な目標は、エラーを回避することです。もちろん、スクリプトを変更する必要があります。何らかの理由で変更できない場合は、別のスクリプトが必要になるため、状況が少し複雑になる可能性があります。

Win32::Process::Infoモジュールを使用すると、Windows で実行中のプロセスを取得し、プラグインが実行されているかどうかを確認できます。

while(1) {
    my $found = false;
    my $p = Win32::Process::Info->new;
    foreach my $proc ($pi->GetProcInfo) {
        if ($proc->{Name} =~ /yourscriptname/i ) {
            found = true;
        }
    }
    if ($found eq 'false') {
        # send email
        my $smtp = Net::SMTP->new("yoursmtpserver");
        eval {
            $smtp->mail("sender@test.it");
            $smtp->recipient("recipient@test.it");
            $smtp->data;
            $smtp->datasend("From: sender@test.it");
            $smtp->datasend("\n");
            $smtp->datasend("To: recipient@test.it");
            $smtp->datasend("\n");
            $smtp->datasend("Subject: Plugin crashed!");
            $smtp->datasend("\n");
            $smtp->datasend("Plugin crashed!");
            $smtp->dataend;
            $smtp->quit;
        };
    }
    sleep(300);
}

Windows に Perl をインストールしていないため、このコードをテストしませんでしたが、ロジックは問題ないはずです。

于 2012-05-15T13:56:04.280 に答える
0

監視の場合 - エラーコードを確認してください。これは、その失敗に役立ちます。

メール送信の場合 - Net::SMTP モジュールを使用してメールを送信できます。コードスニペットが必要な場合はお知らせください。

于 2012-05-15T07:38:56.420 に答える
0

PushMon を使用して、スクリプトを監視できます。Perl スクリプトのスケジュールに一致する PushMon URL を作成します。次に、スクリプトが正常に実行されたら、これらの URL に対して「ping」を実行する必要があります。これらの URL がアクセスされない場合、おそらくスクリプトがクラッシュしたか、停電が発生したために、PushMon が電子メールで通知します。

免責事項: 私は PushMon と関係があります。

于 2012-06-07T00:43:40.507 に答える