プラグインで自分自身を監視できるのに、外部からスクリプトを監視する必要はありません。まず、エラーをキャッチするためにevalを使用できます。エラーが発生した場合は、rpg が提案するようにNet::SMTP モジュールを使用して電子メールを送信できます。ただし、エラーの直前に起こったこととエラーの原因を追跡するために、ある種のログ ファイルを使用することを強くお勧めします。あなたの主な目標は、エラーを回避することです。もちろん、スクリプトを変更する必要があります。何らかの理由で変更できない場合は、別のスクリプトが必要になるため、状況が少し複雑になる可能性があります。
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 をインストールしていないため、このコードをテストしませんでしたが、ロジックは問題ないはずです。