[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