我正在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
}
现在,我正在尝试扩展脚本以查看是否
它可以检查一旦它关闭并发送电子邮件(它现在正在做)并且在它被购买之前不发送电子邮件。顺便说一下,我使用Windows任务调度程序每20分钟运行一次脚本。
在看到网站启动后,它应该转到正常的过程,检查网站是否再次关闭并发送电子邮件(例如网站关闭然后再次购买并再次关闭)。我使用任务调度程序每20分钟运行一次脚本。
任何帮助表示感谢。
答案 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;
}