script para deteccion y conexion telnet automatica

Iniciado por stoker, 24 Julio 2007, 12:03 PM

0 Miembros y 1 Visitante están viendo este tema.

stoker

Hola,

hace un tiempo que estoy con linux pero mis conocimientos de bash scripting son muy limitados

Tengo una maquina que controla el peso de las piezas que van pasando y cuando acaba le puedes decir que te imprima la estadística de las pesadas realizadas. Estas estadísticas te las envía via puerto serie a un adaptador ethernet del cual si estas conectado via telnet recibes las estadísticas. Si no estas conectado se pierden.

Me gustaria hacer un script que detectase cuando la maquina se conecta a la red (no lo esta siempre) y conectase a ella a la espera de datos. Una vez la maquina se desconectase cerrar el telnet y volver a controlar si la maquina se conecta

tengo hecho esto pero creo que los tiros van por otro lado


#!/bin/bash
#hacemos un par de pings
if ping -c2 192.168.1.42 > /dev/null 2>&1
then
# si responde conectamos via telnet y guardamos los datos recibidos en un fichero
telnet 192.168.1.42 > /home/user1/`date +%d-%m-%y_%H:%M`.txt
else
# si no responde matamos cualquier proceso telnet que este en marcha
killall telnet > /dev/null 2>&1

# esperamos 5 seg
sleep 5
fi
# iniciamos otra instancia del script y salimos de este
/home/user1/script.sh &



el problema es que no se como decirle que compruebe que esta conectado el telnet antes de hacerlo

agradecería si alguien me da un poco de luz al tema porque estoy convencido de que no voy por buen camino

Saludos


Asus eeepc 901 Linux - Kubuntu 8.10 + Wifiway 1.0 Final para netbooks persistent en una SD

sirdarckcat

pues, enumera los procesos en ejecución :-/ si alguno es "telnet", pues.. ya estas usandolo :P

Saludos!!

дٳŦ٭

Cita de: stoker en 24 Julio 2007, 12:03 PM
Hola,

hace un tiempo que estoy con linux pero mis conocimientos de bash scripting son muy limitados

Tengo una maquina que controla el peso de las piezas que van pasando y cuando acaba le puedes decir que te imprima la estadística de las pesadas realizadas. Estas estadísticas te las envía via puerto serie a un adaptador ethernet del cual si estas conectado via telnet recibes las estadísticas. Si no estas conectado se pierden.

Me gustaria hacer un script que detectase cuando la maquina se conecta a la red (no lo esta siempre) y conectase a ella a la espera de datos. Una vez la maquina se desconectase cerrar el telnet y volver a controlar si la maquina se conecta

tengo hecho esto pero creo que los tiros van por otro lado


#!/bin/bash
#hacemos un par de pings
if ping -c2 192.168.1.42 > /dev/null 2>&1
then
# si responde conectamos via telnet y guardamos los datos recibidos en un fichero
telnet 192.168.1.42 > /home/user1/`date +%d-%m-%y_%H:%M`.txt
else
# si no responde matamos cualquier proceso telnet que este en marcha
killall telnet > /dev/null 2>&1

# esperamos 5 seg
sleep 5
fi
# iniciamos otra instancia del script y salimos de este
/home/user1/script.sh &



el problema es que no se como decirle que compruebe que esta conectado el telnet antes de hacerlo

agradecería si alguien me da un poco de luz al tema porque estoy convencido de que no voy por buen camino

Saludos

Ese mismo .sh metelo pero a un cron. Te pego una guia:

Citar
Esta vez se trata de: ¿Cómo automatizar tareas en nuestro Linux con cron? En muchas ocasiones habreis necesitado realizar alguna tarea de forma automática un día concreto, o al principio de cada mes, o a una hora determinada y o bien habeis hecho scripts "chapuzas" o lo habeis dejado de hacer por no saber que existe cron, una potente herramienta que permite hacer todo esto, en Linux o en Unix.
Pues bien, vamos a explicaros cómo introducir tareas y programarlas en cron...(sigue)

Digamos que el cron se compone básicamente de dos "partes" el daemon y el fichero de configuración.
El daemon se llama crond y es el encargado de leer el fichero de configuración /etc/crontab.
Lo hace cada 60 segundos, en busca de cambios en dicho fichero e incorporar así tareas al sistema.
Nosotros no vamos a entrar en el deamon, ya que bastará que lo marqueis para que se ejecute al iniciar vuestro sistema, esto lo podeis hacer con la herramienta que traiga vuestra distribución sino, siempre podeis recurrir al modo texto con:chkconfig.

El fichero donde se añaden tareas es,como antes he escrito, /etc/crontab que podremos editar con nuestro editor favorito, como bien sabeis yo mismo publiqué un manual sobre la utilización del editor vi, así que podeis usar ese mismo :).
Bien, una vez editado dicho fichero encontraremos esto:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly


El primer campo, como bien veis, es el entorno donde se ejecutarán las órdenes, podeis dejarlo así por defecto, a menos que useis otra shell.
El segundo campo está claro, es el valor de la variable PATH, si las ordenes que ejecutará la tarea no se encuentran en dicho PATH, no teneis más que añadirlo.
El tercero, manda los outputs del cron al root, o a quien queramos.Si queremos que no se envie nada sólo debemos dejar la variable así: MAILTO="".
Los /etc/cron.hourly, daily...son fichero que usa cron para su gestión interna y los lanza cada día.

Bien, ahora queremos agregar una tarea a nuestro sistema, ¿cómo se hace?.
Debemos saber cómo funcionan los campos del /etc/crontab.
El primer campo son los minutos.
El segundo campo son las horas.
El tercer campo es el día.
El cuarto es el día de la semana.
El quinto es la orden a ejecutar.
Es decir, para el crontab el fichero es así:
minute hour day month dayofweek command
Hay que destacar que los minutos deben ser enteros de entre 0-59.
Las horas, enteros de 0-23.
Días, 1-31. (Para meses que los tengan, claro.)
Meses, 1-12, también se pueden usar nombres cortos, (en inglés) jan, feb...(lo desaconsejo, aconsejo usar números).
Días de la semana, se usan enteros 1-7 (al igual que en los meses, se puede usar el nombre corto, pero tambien lo desaconsejo, en favor de los números.).
Y por último la orden, por ejemplo puede ser: ls -h > /home/manssson/ls.txt.
Con esto ya deberíamos ser capaces de crear y hacer funcionar cualquier tarea, pero cron tiene alguna más utilidades que conviene saber.
Por ejemplo, si ponemos un asterisco (*) en algún campo, por ejemplo el mes, esto hará que se ejecute la orden todos los meses, y luego respetará los demás valores, tales como el día o la hora.
Si queremos indicar un rango de enteros, lo haremos con un guión (-).
Si queremos indicar enteros separados, se harán con comas (,), por ejemplo: 1, 2, 3.
Podemos concretar o excluir valores usan la barra (/), es decir, si queremos que una orden se ejecute durante los 0-59 minutos de una hora menos en el minuto 15, pues lo marcaremos haciendo:0-59/15.
También podemos hacer que una orden que se ejecute en un determinado minuto, haciendo:*/25. Esto hará que nuestra tarea se ejecute siempre en el minuto 25.
El uso de la barra (/) y el asterisco (*) puede emplearse en todos los campos. Si queremos que una tearea no sea ejecutada sólo debemos comentar esa linea al principio con la "almohadilla" (#): #30 18 8 * * root rm -f /var/cache/apt/archives/*.rpm.

Con todo esto ya podremos incorporar tareas a nuestro sistema de forma automática. Como dije al principio de este documento, solo debemos lanzar el daemon crond y asegurarnos de que se ejecute siempre que iniciamos el sistema.

Cita de: Sirdarckcat en 25 Julio 2007, 20:16 PM
pues, enumera los procesos en ejecución :-/ si alguno es "telnet", pues.. ya estas usandolo :P

Saludos!!

Si pero el dice que esté comprobando de forma continua. Eso que le dices es un tanto obvio.  :P


Con sangre andaluza :)


sirdarckcat

apsss aunque sea obvio, mucha gente entra preguntando cosas asi xD, pero lo que pasa esq no entendi bien lo que preguntaba, solo leí del codigo para abajo xD, pero si tienes razon, la mejor forma es usando CRON Jobs..

Saludos!!

stoker

#4
gracias por  las respuestas
la guía muy clara, ya había trabajado con cron pero algunas opciones aun no las conocía

adaptando el script para que trabaje desde cron me queda algo así

#!/bin/bash
# si responde el ping y el telnet esta conectado salimos del script
if ping -c2 192.168.1.42> /dev/null 2>&1
then
if ps -a | grep -s telnet > /dev/null
then
exit
fi
fi

# si responde el ping conectamos por telnet y salimos del script

if ping -c2 192.168.1.42 > /dev/null 2>&1
then
telnet 192.168.1.42 > /home/user1/`date +%d-%m-%y_%H:%M`.txt
exit
fi

# si no responde al ping matamos las conexiones telnet que pueda haber activas
killall telnet > /dev/null 2>&1
exit

en principio trabaja bien pero al salir del script muere el telnet :(
creo que si pudiera evitar ya solo faltaría meterlo en el cron para que se ejecute cada 5 min durante los días laborables de 6 a 16 horas.

también seria interesante controlar si esta conectado por el PID y no por el proceso, así no habría posibilidad que otro telnet liase al script (en principio en esa maquina dudo que nunca se corra otro telnet que no sea el del script)

aprovechando el hilo


if ps -a | grep -s telnet > /dev/null


da como resultado TRUE si el proceso "telnet" se esta ejecutando

como seria la sintaxis para que diese TRUE cuando no se esta ejecutando ?

muchas gracias por la ayuda  :)


Asus eeepc 901 Linux - Kubuntu 8.10 + Wifiway 1.0 Final para netbooks persistent en una SD

stoker

bueno, este es el script
esta en el crontab para que se ejecute cada 5 min


#!/bin/bash
if ping -c2 192.168.1.90
then
        if ps -a | grep -s telnet
        then
        echo "responde y telnet conectado, salimos del script"
        exit
fi
fi

if ping -c2 192.168.1.90
        then
        echo "responde al ping, conetamos el  telnet"
        exec telnet 192.168.1.90 > /home/user1/`date +%d-%m-%y_%H:%M`.txt
        exit
fi
echo "no responde el ping, matamos el telnet y salimos"
killall telnet
exit




rula bien pero tiene un problema, al salir del script muere el telnet al ser un proceso hijo

alguna solución?

Saludos


Asus eeepc 901 Linux - Kubuntu 8.10 + Wifiway 1.0 Final para netbooks persistent en una SD