如何指示Perl脚本检查网站响应?

时间:2012-06-08 16:11:47

标签: perl

我正在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分钟运行一次脚本。

  3. 任何帮助表示感谢。

1 个答案:

答案 0 :(得分: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;
}