Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 监控脚本并在崩溃时发送电子邮件_Windows_Perl_Batch File_Crash_Monitoring - Fatal编程技术网

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

Windows 监控脚本并在崩溃时发送电子邮件,windows,perl,batch-file,crash,monitoring,Windows,Perl,Batch File,Crash,Monitoring,我有一些perl脚本,它们是在Windows2003R2和2008中使用任务调度器调度的。使用perl.exe或通过批处理文件直接调用这些脚本 有时这些脚本无法执行(可能会崩溃),而我们没有意识到这些崩溃 当这些脚本崩溃时,有什么方法可以发送邮件吗?或多或少类似于监视这些脚本 提前谢谢 Karthik用于监控-请检查错误代码。这将帮助你弥补它的失败 对于邮件发送-您可以使用Net::SMTP模块发送电子邮件。如果您需要代码片段,请告诉我。当您可以让插件监控自己时,为什么要从外部监控脚本?首先,您

我有一些perl脚本,它们是在Windows2003R2和2008中使用任务调度器调度的。使用perl.exe或通过批处理文件直接调用这些脚本

有时这些脚本无法执行(可能会崩溃),而我们没有意识到这些崩溃

当这些脚本崩溃时,有什么方法可以发送邮件吗?或多或少类似于监视这些脚本

提前谢谢


Karthik用于监控-请检查错误代码。这将帮助你弥补它的失败


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

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

使用该模块,您可以检索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,但逻辑应该正常。

您可以使用PushMon来监视脚本。您要做的是创建与Perl脚本时间表匹配的PushMon URL。然后,您应该在脚本成功运行时“ping”这些URL。如果无法访问这些URL,可能是因为脚本崩溃或电源故障,PushMon将通过电子邮件通知您


免责声明:我与PushMon有关联。

如果Perl文件本身在未直接调用或未通过批处理文件调用的情况下崩溃,该怎么办?我正在寻找intranetAh内的服务器是的,这是基于云的。如果我看到可以在内部安装的东西,我会告诉你的。在intranet中设置此选项的一点是,您必须监视断电和SMTP问题。