0

Web サイトに ping を実行して可用性を確認し、ダウンしている場合にのみメールを送信しています。(その部分は、以下のコードに従ってうまく機能しています。)

require LWP::UserAgent;
my $ua = LWP::UserAgent->new;
$ua->timeout(20);
my $response = $ua->get('https://www.Mysite.net/websuite/');
if (! $response->is_success) {
    #print 'CMM Is up and Running';  
    $path = "C:\\prac\\send_email_failure.ps1";
    $pwspath = "c:\\windows\\system32\\windowspowershell\\v1.0\\powershell.exe";
    system("$pwspath -command $path"); #using powershell to invoke email utility      
}

現在、スクリプトを拡張して、

  1. ダウンしたらチェックして電子メールを送信し (現在実行中)、買収されるまで電子メールを送信しません。ちなみに、私は Windows タスク スケジューラを使用して 20 分ごとにスクリプトを実行しています。

  2. ウェブサイトが稼働していることを確認した後、サイトが再びダウンしているかどうかを確認し、電子メールを送信する通常のプロセスに移動する必要があります (たとえば、ウェブサイトがダウンしてから買い戻し、再びダウンした場合など)。タスク スケジューラを使用して、20 分ごとにスクリプトを実行しています。

どんな助けでも感謝します。

4

1 に答える 1

1

スクリプトがある種のスケジューラから実行される場合、何らかの方法で最後のリクエストのステータスを保持する必要があります。たとえば、最後のステータスに「ダウン」のフラグを立てるファイルを作成できます。

または、スクリプトをデーモンとして実行し、20 分ごとにチェックをスケジュールすることもできます (たとえば、AnyEventを使用)。これにより、ファイルシステム関連の問題に対処する必要がなくなります。

use LWP::UserAgent;
use AnyEvent;

my $previous = 1;
my $watch = AnyEvent->timer(interval => 1200, cb => sub {
        if(check_status() == 0) {
            if($previous == 1) {
                # send e-mail
            }
            $previous = 0;
        }
        else {
            $previous = 1;
        }
    });

AnyEvent->condvar->recv;

sub check_status {
    my $ua = LWP::UserAgent->new(timeout => 20);
    my $response = $ua->get('...');
    return $response->is_success ? 1 : 0;
}
于 2012-06-08T17:12:02.133 に答える