use Win32::Process::Info; while (1==1){ use Sys::Hostname; use HTTP::Date qw(time2iso str2time time2iso time2isoz); use Net::SMTP; if ( $#ARGV < 1 ){ print "please input 程序目录 程序名! "; exit(-1); }; open( FILE, "<", "mail.conf" ); my @temp=<FILE>; foreach (@temp) { chomp $_; ($name,$passwd,$server,$send) = split(/s+/,$_); }; close FILE; sub send_mail{ if (@_ != 2){print "请输入2个参数 ";exit 1}; ($m,$n) = @_; #将参数赋值给变量 my $to_address = $m; my $CurrTime = time2iso(time()); my $to_address = $m; my $mail_user = "$name"; my $mail_pwd = "$passwd"; my $mail_server = "$server"; my $from = "From: $mail_user "; my $subject = "Subject: zjcap info "; my $info = "$CurrTime--$n"; my $message = <<CONTENT; $info CONTENT my $smtp = Net::SMTP->new($mail_server); $smtp->auth($mail_user, $mail_pwd) || die "Auth Error! $!"; $smtp->mail($mail_user); $smtp->to($to_address); $smtp->data(); # begin the data $smtp->datasend($from); # set user $smtp->datasend($subject); # set subject $smtp->datasend(" "); $smtp->datasend("$message "); # set content $smtp->dataend(); $smtp->quit(); }; my $pi=Win32::Process::Info->new({assert_debug_priv => 1}); my @processinfo =''; my @arr1=''; my $var=''; my @processinfo = $pi->GetProcInfo(); foreach my $process (@processinfo){ print join(':',$process->{'Name'},$process->{'ProcessId'}, $process->{'Owner'})," "; $var=$process->{'Name'}; ##将进程名放入数组 push @arr1,$var; } print "---------------------- "; $proc="$ARGV[1]"; print "$proc is $proc "; $dir="$ARGV[0]"; print "$dir is $dir "; #"C:Program Files (x86)360360Safe360Safe.exe" if (grep m/$proc/i,@arr1 ){print "$proc is running "} else{ print "$proc is not running ",chdir $dir, #else{ print "$proc is not running ",chdir $dir, system("start $proc"),send_mail($name,"$send is lost") };} sleep(5); zhaoyangjian@zjcap.cn xxxx smtp.exmail.qq.com "xx serivce is down"