0

我正在 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 回答