[FUG-BR] Executar script pelo status da placa

Rafael Floriano Sousa Sales rafael.sales em gmail.com
Terça Julho 4 00:33:33 BRT 2006


Para brincar


#!/usr/local/bin/perl


# DEBUG - 0 = desativado, 1 = ativado
$debug = 1;

# Parâmetro do ifconfig, exatamente como no /etc/rc.conf
$inet = "inet 192.168.1.1 netmask 255.255.255.0";

# Interface principal
$master = "xl1";

# Interface backup
$backup = "xl2";

# 0 = master, 1 = backup
$active = 0;

# Controle
$erro = 0;
$ok = 0;

while (1 == 1) {

 # Se a interface Master está ok
 if ($debug) {
  print "active: ";
  if ($active == 1) { print "[ backup ] "; } else { print "[ master ] "; }
  print " checking: [ master ]... (ok = $ok, erro = $erro)\n";
 }

 # Começa dormindo...
 sleep 3;

 if (check_interface($master)) {
  $erro = 0;
  if ($active == 1) {
   $ok++;
   if ($ok >= 3) {
    # Mudando para interface master
    print "voltando para master... (ok = $ok, erro = $erro)\n" if ($debug);
    $x = `ifconfig $backup down`;
    $x = `ifconfig $master $inet`;
    $x = `ifconfig $master up`;
    $active = 0;
   }
  }
 } else {
  $ok = 0;
  if ($active == 0) {
   $erro++;
   if ($erro >= 3) {
    # Mudando para interface backup
    print "mudando para backup... (ok = $ok, erro = $erro)\n" if ($debug);
    $x = `ifconfig $master down`;
    $x = `ifconfig $backup $inet`;
    $x = `ifconfig $backup up`;
    $active = 1;
   }
  }
 }
}

exit;

##########################################

sub check_interface {

 local($ret) = 0;
 local($int) = @_;

 open(IFCONFIG,"ifconfig $int |");
 while (<IFCONFIG>) {
  chop;
  if (/\s+status\:/) {
   if (/active$/) {
    $ret = 1;
   }
  }
 }
 close(IFCONFIG);

 return($ret);

}


Neste exemplo basicamente ele verifica a interface 3 vezes e ativa a
outra interface.

Abraço

-- 
Rafael Floriano Sousa Sales
Segurança da  Informação
Tompast IT Services
e-mail: rafael.sales at tompast.org
+55-11-3207-2457
+55-11-8433-2281


Mais detalhes sobre a lista de discussão freebsd