Category: | Utility Scripts |
Author/Contact Info | Tex Thompson <tex@biosysadmin.com> |
Description: | This is a quick program that I wrote for a friend who had some flakiness on his server. It parses the output of `ps ax`, checks for vital processes, and restarts any process that are stopped. |
#!/usr/bin/perl -w
use strict;
use MIME::Lite;
# monitor.pl - a program for monitoring critical processes on a Unix s
+erver
# Copyright 2004, Tex Thompson <tex@biosysadmin.com>
my $emergency_email = 'contact@mail.com';
my $time_to_sleep = 60;
my %vital_processes = (
'httpd' => '/usr/local/apache/bin/apachectl start',
'pop-before-smtp' => '/etc/init.d/pop-before-smtp.init start',
'postfix' => '/etc/init.d/postfix start',
'mysql' => '/etc/init.d/mysql start',
'ssh' => '/etc/init.d/sshd start',
'syslog' => '/etc/init.d/syslog start'
);
while (1) {
my @process_listing = `ps ax`;
foreach my $process ( keys %vital_processes ) {
my @running = grep /$process/, @process_listing;
my $num_processes = scalar @running;
if ( $num_processes == 0 ) {
# try to fix the problem
my $time = localtime();
print "Process $process not found at $time!\n";
print "Executing command ",$vital_processes{ $process },"\n";
my $command = $vital_processes{ $process };
my $output = `$command`;
# send a notification e-mail
my $data = "$process not running at $time!\n";
$data .= "Tried to restart with command\n$command\n";
$data .= "Output:\n$output\n";
my $msg = MIME::Lite->build(
From => 'root@biosysadmin.com',
To => $emergency_email,
Subject => "Emergency: $process down",
Type => 'TEXT',
Data => $data
);
$msg->send;
}
}
sleep( $time_to_sleep );
}
|
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: intelli-monitor.pl
by Juerd (Abbot) on May 06, 2004 at 20:10 UTC | |
by biosysadmin (Deacon) on May 07, 2004 at 03:50 UTC | |
Re: intelli-monitor.pl
by Roger (Parson) on May 07, 2004 at 17:02 UTC | |
Re: intelli-monitor.pl
by dpavlin (Friar) on May 15, 2004 at 21:19 UTC |
Back to
Code Catacombs