В общем такая проблема не знаю может и кто делал такое но вот
в bash все ок, то есть идет проверка работа способности интенет канала, но дело в том что есть еще пару
хостов которые тоже нужно проверять на работо способность и было принято решение привязать к самописному биллингу через mysql
в общем через форму заносятся ip адреса и имена интерфейсов которые нужно проверять. Так вот далее иедт скрипт на perl который не понятно как
ставит на угад что хост UP или DOWN.
На баше работает все замечательно...
#!/bin/bash
GW1="83.xxx.xxx.xxx";
IF1="eth0"
ping -c 3 -q $GW1 -I $IF1 > /dev/null
if [ $? -eq 0 ]; then
echo "$GW1 $IF1 up" >> /usr/local/scripts/utils/tmp/log_eth0;
else
beep -f 1000 -n -f 2000 -n -f 2000
echo `date` "$GW1 $IF1 down" >> /usr/local/scripts/utils/tmp/log_eth0;
fi
И так далее по списку интерфейсов
Вот perl по идее все должно работать замечательно но при выполнении
живет своей жизнью и не определяет хосты что они работаю или нет
просто тупо ставит либо UP либо DOWN даже закономерности нету никакой так от балды проставляет
#!/usr/bin/perl -w
use FindBin;
use lib $FindBin::Bin;
require 'inc/db.pl';
$db=Connect();
$q=$db->prepare("select gate, iface from gateway");
#$q=$db->prepare("SELECT gate, iface FROM gateway where gate order by gate");
$q->execute;
while (($gate, $iface) = $q->fetchrow_array()) {
system("
ping -c 3 $gate -I $iface > /dev/null
if [ $? -eq 0 ]; then
echo '$gate\t $iface\t up'
else
echo '$gate\t $iface\t down'
fi");
}
$q->finish();
$db->disconnect();