监视脚本并在崩溃时发送电子邮件

时间:2012-05-15 07:15:03

标签: windows perl batch-file crash monitoring

我有一些perl脚本在Windows 2003 R2和2008中使用任务调度程序进行调度。这些脚本可以使用perl.exe或批处理文件直接调用。

有时这些脚本无法执行(可能崩溃),我们也不知道这些崩溃。

当这些脚本崩溃时,是否有任何方法可以发送邮件?或多或少像监视这些脚本

提前致谢

Karthik

3 个答案:

答案 0 :(得分:1)

为什么在可以让插件监视自己的时候从外部监视脚本?首先,您可以使用 eval 来捕获错误,如果发生错误,您可以发送带有 Net :: SMTP模块的电子邮件作为rpg建议。但是,我强烈建议您使用某种日志文件,以便跟踪错误发生之前发生的事情以及导致错误的原因。您的主要目标应该是避免错误。那个当然要求你修改脚本,如果由于任何原因你不能这样做那么情况可能会有点复杂,因为你需要另一个脚本。

使用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,但逻辑应该没问题。

答案 1 :(得分:0)

用于监控 - 请检查错误代码。这将有助于您的失败。

对于邮件发送 - 您可以使用Net :: SMTP模块发送电子邮件。如果你需要一个代码片段,请告诉我。

答案 2 :(得分:0)

您可以使用PushMon监控脚本。您所做的是创建与Perl脚本的计划相匹配的PushMon URL。然后,当脚本成功运行时,您应该“ping”这些URL。如果未访问这些URL,可能是因为您的脚本崩溃或出现电源故障,PushMon会通过电子邮件通知您。

免责声明:我与PushMon有关。