Monitor Process
Publicado por Leonardo Berbert Gomes (última atualização em 14/03/2012)
[ Hits: 4.874 ]
Homepage: https://www.linkedin.com/in/leoberbert
Este script tem como finalidade monitorar processos e caso este não esteja em execução ele realizará o start do mesmo e também irá registrar num arquivo de Log. Neste script usei o apache como referência, porém, poderão ser monitorados quais e quantos processos forem necessários.
Espero que possa ajudar a todos.
#!/usr/bin/perl
# Created by Leonardo Berbert Gomes
# E-mail: leoberbert@uol.com.br
# Date: Mar 13 2012
# Version: 1.00
# Description: Monitor Process
use Time::Local;
use File::Basename;
use Sys::Hostname;
use strict;
#Altere para o processo que será monitorado
my @process = ('apache');
my $hostname = hostname();
my $scriptname = basename($0);
my ($da_sec,$da_min,$da_hour,$da_mday,$da_mon,$da_year,$da_wday,$da_yday,$da_isdst) = localtime();
$da_year += 1900;
$da_mon++;
if ( $da_mday < 10 )
{
$da_mday = 0 . $da_mday;
}
if ( $da_mon < 10 )
{
$da_mon = 0 . $da_mon;
}
## Altere para o local onde o log deverá ser redirecionado
my $out_file="/home/user/file_" . $da_year . $da_mon . $da_mday . ".log";
foreach my $service (@process) {
my $status = `/bin/ps cax | /bin/grep $service`;
## Acrescente o hostname que será monitorado ##
if (!$status && $hostname =~/killer/) {
open(OUT,">>$out_file") or die "Can't open $out_file: $!";
printf OUT ( "%-12.12s" . ":" . get_date(1) . ":P:Process is not running\n", $scriptname);
printf OUT ( "%-12.12s" . ":" . get_date(1) . ":1:Starting Process\n", $scriptname);
#Comando para o start do processo em questão
`apachectl start`;
printf OUT ( "%-12.12s" . ":" . get_date(1) . ":I:Process successfully started\n", $scriptname);
close OUT;
}
}
sub get_date {
my $opt = shift;
my ($sec,$min,$hour,$day,$month,$year) = (localtime(time))[0,1,2,3,4,5]; $month +=1;$year +=1900;
if ($day =~ /^\d$/) { $day = "0" . $day;}
if ($min =~ /^\d$/) { $min = "0" . $min;}
if ($sec =~ /^\d$/) { $sec = "0" . $sec;}
if ($hour =~ /^\d$/) { $hour = "0" . $hour;}
if ($month =~ /^\d$/) { $month = "0" . $month;}
if ($opt) {
my $current_date = "$day$month $hour$min$sec";
return $current_date;
} else {
my $date = "$year$month$day$hour$min$sec";
return $date;
}
}
Calculadora com Perl com menos de 10 linhas de código
Bluefin - A nova geração de ambientes de trabalho Linux
Como atualizar sua versão estável do Debian
Cirurgia para acelerar o openSUSE em HD externo via USB
Pós-instalação do elementary OS 8.1
Quer auto-organizar janelas (tiling) no seu Linux? Veja como no Plasma 6 e no Gnome
Copiando caminho atual do terminal direto para o clipboard do teclado
Conky não mostra temperaturas da CPU no notebook (8)
archlinux resolução abaixou após atualização (18)
Estou com um problema no meu desktop do ubuntu (2)
Não estou conseguindo fazer funcionar meu Postfix na versão 2.4 no Deb... (0)









