Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  5 946
Jeg setter sammen et script for og logge ping requests, Det funker så langt bortsett fra at alle requests kommer i 1 linje å ikke i separate linjer.

Her er koden jeg har så langt:

Kode

#!/bin/sh
NOW=$(date +"%T %m/%d/%Y")
PING=$(ping -c 5 vg.no)
echo $NOW: $PING >> /home/exogrim/ping.log
exit 0
Loggen ser slik ut:

Kode

20:24:44 02/10/2011: PING vg.no (195.88.55.16) 56(84) bytes of data. 64 bytes from www.vg.no (195.88.55.16): icmp_req=1 ttl=246 time=18.1 ms 64 bytes from www.vg.no (195.88.55.16): icmp_req=2 ttl=246 time=85.7 ms 64 bytes from www.vg.no (195.88.55.16): icmp_req=3 ttl=246 time=30.0 ms 64 bytes from www.vg.no (195.88.55.16): icmp_req=4 ttl=246 time=15.9 ms 64 bytes from www.vg.no (195.88.55.16): icmp_req=5 ttl=246 time=45.5 ms --- vg.no ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4005ms rtt min/avg/max/mdev = 15.978/39.086/85.706/25.568 ms
Jeg vil at scriptet skal separere hver ping request jeg får..


Jeg er ikke en ekspert i dette så jeg trenger litt hjelp

På forhånd Takk
Jeg er kanskje ikke den rette til dette, men når du skriver f.eks "ping vg.no -t" så kommer det som liste? Slik du mener?
Hvordan du logger det aner jeg ikke.
Basert på hva du skriver så tolker jeg det dithen at du ønsker å logge alle innkommende ping (ICMP echo request). Men når jeg ser eksempelet ditt samt at jeg tviler på at vg.no pinger deg, så antar jeg at du er ute etter å logge selve resultatet av din utgående ping.

I så tilfelle så er det jo bare å pipe (>) det til en log fil.
Eksempel linux:
ping vg.no > file.log

Eksempel windows:
ping vg.no -t > file.log
rujol's Avatar
Trådstarter
38 2
vist man skriver

Kode

ping -c 5 vg.no
i terminal får man dette

Kode

ping -c 5 vg.no
PING vg.no (195.88.55.16) 56(84) bytes of data.
64 bytes from www.vg.no (195.88.55.16): icmp_req=1 ttl=246 time=18.4 ms
64 bytes from www.vg.no (195.88.55.16): icmp_req=2 ttl=246 time=19.3 ms
64 bytes from www.vg.no (195.88.55.16): icmp_req=3 ttl=246 time=16.0 ms
64 bytes from www.vg.no (195.88.55.16): icmp_req=4 ttl=246 time=34.5 ms
64 bytes from www.vg.no (195.88.55.16): icmp_req=5 ttl=246 time=16.7 ms

--- vg.no ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 16.042/21.016/34.569/6.878 ms
men når jeg skriver det i bash scriptet så får jeg alt i 1 linje, slik jeg viste først. jeg vil at det skal være slik det kommer fram i terminal.

Håper det er mer forståelig nå

Sitat av JohnMichael Vis innlegg
Basert på hva du skriver så tolker jeg det dithen at du ønsker å logge alle innkommende ping (ICMP echo request). Men når jeg ser eksempelet ditt samt at jeg tviler på at vg.no pinger deg, så antar jeg at du er ute etter å logge selve resultatet av din utgående ping.

I så tilfelle så er det jo bare å pipe (>) det til en log fil.
Eksempel linux:
ping vg.no > file.log

Eksempel windows:
ping vg.no -t > file.log
Vis hele sitatet...
Å hærregud, ikke meningen og lage slike idiotiske threads, takk for svaret, akkurat det jeg tenkte på :S

problem løst Tusen takk for hjelpa
Her. versågod:

Kode

#!/bin/bash
NOW=$(date +"%T %m/%d/%Y")

COUNTER=0
while [  $COUNTER -lt $1 ]; do
NOW=$(date +"%T %m/%d/%Y")
PING="`ping -n -c 1 vg.no |grep "time=" |awk -F "time=" '{print $2}'`"
echo -e "$NOW: $PING" >> ping.log
let COUNTER=COUNTER+1
echo "$COUNTER ping.."
done
syntax:
./ping-script 5
Der 5 er antallet ping du vil utføre.

Kode

root@server:~# cat ping.log
21:12:51 02/10/2011: 20.8 ms
21:12:51 02/10/2011: 26.1 ms
21:12:52 02/10/2011: 30.5 ms
21:12:52 02/10/2011: 22.5 ms
21:12:52 02/10/2011: 22.5 ms
Mulig du vil endre $NOW med å legge til millisekund også
Sist endret av RandomiZed; 10. februar 2011 kl. 21:16.
Jeg laget et script for litt siden som logget ping og genererte bilder. Det ble aldri ferdig og er derfor litt statisk. Se spesielt på linje 70 og 71. Husker desverre ikke om jeg fikk luket bort alle feilene.

PS: Det depender på gnuplot.

Kode

#!/bin/bash

# List of adresses to ping
list=(
	129.241.210.1
	8.8.8.8
)

# List of file extensions
extensions=(
	data
	gp
	png
)

# Check if files excists
if [ "$1" != "--force" ]; then
	echo "Checking if file exists ..."
	files=0
	for i in $( seq 0 $(( ${#list[@]}-1 )) ); do
		for j in $( seq 0 $(( ${#extensions[@]}-1 )) ); do
			if [ -e ./ping-${list[$i]}.${extensions[$j]} ]; then
				echo "./ping-${list[$i]}.${extensions[$j]} already exists."
				files=1
			fi
		done
	done
	if [ $files -eq 1 ]; then
		echo -e "Use $0 --force if you don't care.\nExiting."
		exit 1
	fi
fi

# Create the gnuplot files
echo "Creating gnuplot files ..."
for i in $( seq 0 $(( ${#list[@]}-1 )) ); do
printf "%b\n" "#!/usr/bin/gnuplot
reset
set terminal png

set xdata time
set timefmt \"%Y-%m-%d %H:%M:%S\"
set format x \"%H:%M\"
set xlabel \"time\"

set ylabel \"ms.\"

set title \"Ping statistics for ${list[$i]}\"
set key reverse Left outside
set grid

set style data linespoints

plot \"ping-${list[$i]}.data\" using 1:3 title \"Maximum\", \\
\"\" using 1:4 title \"Average\", \\
\"\" using 1:5 title \"Minimal\", \\
\"\" using 1:6 title \"Transmitted\", \\
\"\" using 1:7 title \"Received\", \\
\"\" using 1:8 title \"Standard deviation\"" > ./ping-${list[$i]}.gp
done

# Make the gnuplot data file
echo "Initializing the gnuplot data files ..."
for i in $( seq 0 $(( ${#list[@]}-1 )) ); do
	echo "##date time max avg min transmitted received mdev" > ./ping-${list[$i]}.data
done

# Print all the data to
echo "Pinging ..."
for i in $( seq 0 10 ); do
	sleep 600 & pid=$!
	date=$( date +'%F %T' )
	for j in $( seq 0 $(( ${#list[@]}-1 )) ); do
		ping=$( ping -c 10 -q ${list[$j]} )
		transmitted=$( echo "$ping" | grep "^[0-9]* packets transmitted" | awk '{ print $1}' )
		received=$( echo "$ping" | grep "^[0-9]* packets transmitted" | awk '{ print $4}' )
		min=$( echo "$ping" | grep "^rtt" | awk '{ print $4 }' | awk -F'/' '{ print $1}')
		avg=$( echo "$ping" | grep "^rtt" | awk -F'/' '{ print $5}')
		max=$( echo "$ping" | grep "^rtt" | awk -F'/' '{ print $6}')
		mdev=$( echo "$ping" | grep "^rtt" | awk '{ print $4 }' | awk -F'/' '{ print $4}')
		echo "$date $max $avg $min $transmitted $received $mdev" >> ./ping-${list[$j]}.data
	done
	wait $pid
done

# Chmod the gnuplot file
echo "Chmoding the gnuplot files ..."
for i in $( seq 0 $(( ${#list[@]}-1 )) ); do
	chmod +x ./ping-${list[$i]}.gp
done

# Create the pictures
echo "Creating the pictures ..."
for i in $( seq 0 $(( ${#list[@]}-1 )) ); do
	./ping-${list[$i]}.gp > ping-${list[$i]}.png 2>/dev/null
done

# Cleaning up
echo "Cleaning up ..."
for i in $( seq 0 $(( ${#list[@]}-1 )) ); do 
	rm "./ping-${list[$i]}.gp"
done

echo "All done."
exit 0