Buenos días,
resulta que me funcionó lo que me dijiste, explorer; creo que el problema estaba en que no retornaba lo que yo quería, ahora más o menos funciona.
Tengo aún dudas sobre el retorno; te pongo dos ejemplos que no me funcionan:
Los dos comandos tienen este retorno:
Using text Syntax Highlighting
[root@localhost src]# asterisk -rx 'dahdi show status'
Description Alarms IRQ bpviol CRC4
Wildcard TDM400P REV E/F Board 5 OK 0 0 0
[root@localhost src]# asterisk -rx 'sip show registry'
Host Username Refresh State
proxy01.sipphone.com:5060 1xxxxxxxxxx 105 Registered
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Mi código es el siguiente:
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use Getopt::Std;
use strict;
# Variables Globales
my $asterisk_bin="/usr/bin/sudo /usr/sbin/asterisk";
my $asterisk_option="-rx";
my $asterisk_command_channels="sip show channels";
my $asterisk_gizmo="sip show registry";
my $asterisk_dahdi="dahdi show status";
# Programa Principal
#####################
# Obtenemos la opción de la línea de comandos
my $asterisk_command = $asterisk_command_channels;
my $valid_opts='hvc:';
getopts("$valid_opts", \%opts) or (printsyntax() and exit(2));
for my $option (keys %opts) {
my $value=$opts{$option};
if ($option eq 'h') {
#Opcion de ayuda
printsyntax();
exit(2);
} elsif ($option eq 'v') {
#Opcion de version del script
printversion();
exit(2);
} elsif ($option eq 'c') {
if ($value eq "sipchannels") {
$asterisk_command = $asterisk_command_channels;
} elsif ($value eq "gizmo") {
$asterisk_command = $asterisk_gizmo;
} elsif ($value eq "dahdi") {
$asterisk_command = $asterisk_dahdi;
} else {
printsyntax();
exit(2);
}
}
}
# Ejecución de comando Asterisk y análisis de resultados
if ($asterisk_command eq $asterisk_command_channels) {
#Comprobacion de que la salida es la correcta
my $cmd = qq($asterisk_bin $asterisk_option \"$asterisk_command"\ );
foreach ( qx($cmd)) {
if (/SIP\ channels/) {
$output=$_;
my $return = 0;
print(" $output \n");
exit($return);
}
else{
print(" Asterisk no esta arrancado \n");
my $return = 2;
exit($return);
}
}
} elsif ($asterisk_command eq $asterisk_gizmo) {
#Comprobacion de que la salida es la correcta
my $cmd = qq($asterisk_bin $asterisk_option \"$asterisk_command"\ );
foreach ( qx($cmd)) {
if (/Registered/) {
$output=$_;
my $return = 0;
print(" El proveedor Gizmo 5 esta registrado. \n");
exit($return);
}
else{
print(" El proveedor Gizmo 5 no esta registrado en este momento. \n");
my $return = 1;
exit($return);
}
}
} elsif ($asterisk_command eq $asterisk_dahdi) {
# Comprobación de que la salida es la correcta
my $cmd = qq($asterisk_bin $asterisk_option \"$asterisk_command"\ );
foreach ( qx($cmd)) {
if (/OK/) {
$output=$_;
my $return = 0;
print(" La tarjeta Wildcard TDM400P no tiene alarmas. \n");
exit($return);
}
else{
print(" Revisar el estado de la tarjeta Wildcard TDM400P. \n");
my $return = 1;
exit($return);
}
}
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Ambas ejecuciones deben devolver siempre 0, pero entran por el else y se imprime en pantalla el mensaje contrario:
Using text Syntax Highlighting
[nagios@localhost src]$ ./nagisk.pl -c gizmo
El proveedor Gizmo 5 no esta registrado en este momento.
[nagios@localhost src]$ ./nagisk.pl -c dahdi
Revisar el estado de la tarjeta Wildcard TDM400P.
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Yo creo que el problema es que no encuentra en el retorno el "parámetro" del if().
El problema que tengo es que no entiendo cómo se guarda el retorno; supongo que se guardará tal cual, y no como comprueba en el if() si hay un
string determinado en ese retorno.
Espero que podáis ayudarme...
Gracias.