Portál AbcLinuxu, 5. května 2025 04:54
Zdravim dobri lide,
potreboval bych poradit s jednim skriptikem.
Jde mi o neustale zjistovani dostupnosti hosta. Pokud je host online, skript by se mel pripojit telnetem na port 21 a vystup ukladat do souboru. Pokud se klient odpoji, spojeni by se melo zavrit a opet pokracovat v overeni dostupnosti a tak dokola. Pokusil jsem se na to neco napsat, ale neni to 100% funkcni. Nekdy to skonci na cyklu while u read - skript si mysli, ze je klient online, ale neni a ceka na data, ktera nejdou.
#!/bin/bash
ADRESA=$1
while [ 1 ]
do
PING=$(ping -W 1 -c 1 $ADRESA | grep "from" | awk '{print $(NF-1)}')
if [[ $PING == *time* ]]; then
# Je online
# Otevreme spojeni
#echo "Online, oteviram socket"
exec 3</dev/tcp/$ADRESA/21
# Zacneme cist data
while read <&3
do
set -- ${REPLY//$'\r'/}
TODAY=$(/bin/date +'%Y%m%d')
TIME=$(/bin/date +'%H:%M:%S')
#echo "ctu ..."
echo -e "$TIME\n$REPLY\n" >> /scripts/kas/logs/$TODAY-$ADRESA.log
PING=$(ping -W 1 -c 1 $ADRESA | grep "from" | awk '{print $(NF-1)}')
# Jestlize neni odezva, prerusime cyklus a zavreme socket
if [[ $PING != *time* ]]; then
#echo "Disconnected"
exec 3<&-
break;
fi
done
#else
# Neni online
#echo "Timed out"
fi
sleep 1
done
Nemel by z Vas nekdo lepsi napad, jak by se to dalo vylepsit a osetrit tuhle chybu?
Mockrat diky!
Kaja
Řešení dotazu:
V příloze máš ukázkový skriptík v Pythonu. Řešit takového klient v Bashi nemá smysl.
Když ho spustíš, tak se pokusí připojit na:
$ nc -l -p 5000 127.0.0.1
Pokud se nepodaří připojit k serveru, uloží tuto informaci do logu a za 3s to zkusí znovu, pokud se to znovu nepodaří, tak neprovádí logování stejné chyby, pouze pokud by se vyskytla za dobu delší než 60s. Používat ping je zbytečné. Log sype do:
$ tail -f /tmp/client.log 2010-03-10 11:40:10,674 - INFO - starting client 0.1.0 2010-03-10 11:40:10,675 - INFO - create connection to 127.0.0.1:5000 2010-03-10 11:40:17,377 - INFO - receive data: 'Hello' 2010-03-10 11:40:18,969 - INFO - receive data: 'Bye' 2010-03-10 11:40:19,898 - INFO - close connection to 127.0.0.1:5000 2010-03-10 11:40:22,896 - ERROR - TCP client exception Traceback (most recent call last): File "./client.py", line 43, in main_thread self.socket.connect((self.address, self.port)) File "<string>", line 1, in connect error: (111, 'Connection refused') 2010-03-10 11:45:04,681 - INFO - received signal 2 2010-03-10 11:45:04,682 - INFO - exit
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.