Пишите нам!
Архитектурная мастерская.
Продвижение сайтов от optimism.ru
Page generation time: 0.14s (PHP: 43% – SQL: 57%) – SQL queries: 44 – GZIP disabled – Debug off
Тоже задавался вопросом непрерывного пинга с логгированием и временными метками. Написал бат-файл:
@echo off
rem pinger v2.1
setlocal>nul
rem в этот файл будет выведен лог работы команды ПИНГ
set filelogname="outlog.txt"
rem адрес, который следует пинговать
set iptoping="8.8.8.8"
cls
echo ping %iptoping% ........
rem время в формате 23:15:51,50
set xxa=%TIME%
rem дата в формате 07.09.2016
set xxd=%DATE%
rem формирование трех имен для временных файлов вида
rem ~0809201630121088.tmpp1
rem ~0809201630121089.tmpp1
rem ~0809201630121080.tmpp1
rem формирование строки текущего времени (для назв. временн. файлов)
rem кол-во единиц часов+кол-во минут+кол-во секунд+кол-во д.секунд (без раздел.)
set xxb=%xxa:~-10,1%%xxa:~-8,2%%xxa:~-5,2%%xxa:~-2,2%
rem кол-во десятков часов
set xxc=%xxa:~-11,1%
rem если десятков часов нет, то дописать в xxb впереди тройку
rem иначе дописать впереди xxb кол-во десятков часов
if -%xxc%==- (set xxb=3%xxb%) else set xxb=%xxc%%xxb%
rem если число часов xxb = 0(формат времени с ведущ.0) -то дописать впереди 3
if -%xxb:~0,1%==-0 set xxb=3%xxb%
rem дни+месяцы+годы+время(xxb) -- всё без разделителей
set out1=%xxd:~0,2%%xxd:~3,2%%xxd:~6,4%%xxb%
rem out1 без последней цифры
set out2=%out1:~0,-1%
rem последняя цифра out1
set xxa=%out1:~-1%
rem прибавить 2 к последней цифре out1
set /a xxa+=2
rem out2 + последний знак из xxa
set out3=%out2%%xxa:~-1%
set /a xxa-=1
set out2=%out2%%xxa:~-1%
rem создание временного файла и вывод в него
rem получили три различных имени файла без точек
set out1=~%out1%.tmpp1
set out2=~%out2%.tmpp1
set out3=~%out3%.tmpp1
rem удаление старых временных файлов
del %TEMP%\*.tmpp1
rem вывод даты в лог
date /t > %filelogname%
:loop
rem пауза в одну сек с небольшим, между основными пингами (-n 3 = 2сек и т.д.)
ping -n 2 localhost > nul
rem вывод результатов ОДНОГО пинга в файл out1
ping %iptoping% -n 1 > %TEMP%\%out1%
rem вывод текущего времени в файл out2 (с лишним "введите" "текущее" и т.п.)
echo.|time > %TEMP%\%out2%
rem вывод времени в out3 (чистый вид с миллисекундами)
for /f "tokens=1,2,3" %%a in (%TEMP%\%out2%) do if -%%a==-Текущее (echo %%c > %TEMP%\%out3%)
rem файл аут2 больше не нужен
del /q %TEMP%\%out2%
rem создадим переменную времени timedata вида 00:00:00 (отсекая миллисек.)
for /f "tokens=1 delims=," %%a in (%TEMP%\%out3%) do set timedata=%%a
rem различный вывод при <1мс >=1мс и превыш. интервала ожидания
for /f "tokens=1,2,3,4,5,6,7" %%a in (%TEMP%\%out1%) do if -%%a==-Ответ (if -%%f==-время^<1мс (
echo %%a %%b %%c %%d %%e время^^^<1мс %%g > %TEMP%\%out3%
) else (echo %%a %%b %%c %%d %%e %%f %%g > %TEMP%\%out3%)
)else if -%%a==-Превышен (echo %%a %%b %%c %%d %%e > %TEMP%\%out3%)
rem создадим переменную пинга
for /f "tokens=*" %%a in (%TEMP%\%out3%) do set pingdata=%%a
rem запишем полученные данные в выходной файл, добавив метку времени
echo %timedata% %pingdata% >> %filelogname%
goto loop Ping
returns this by default:
64 bytes from 203.173.50.132: icmp_seq=0 ttl=244 time=57.746 ms Is there some way I can get it to add the timestamp?
Mon 21 May 2012 15:15:37 EST | 64 bytes from 203.173.50.132: icmp_seq=0 ttl=244 time=57.746 ms I’m on OS X v10.7 (Lion) which seems to have some BSD
version of ping.

asked May 21, 2012 at 5:17

I could not redirect the Perl based solution to a file for some reason so I kept searching and found a bash
only way to do this:
Wed Jun 26 13:09:23 CEST 2013: PING www.google.fr (173.194.40.56) 56 bytes of data.
Wed Jun 26 13:09:23 CEST 2013: 64 bytes from zrh04s05-in-f24.1e100.net (173.194.40.56): icmp_req=1 ttl=57 time=7.26 ms
Wed Jun 26 13:09:24 CEST 2013: 64 bytes from zrh04s05-in-f24.1e100.net (173.194.40.56): icmp_req=2 ttl=57 time=8.14 ms The credit goes to https://askubuntu.com/a/137246
answered Jun 26, 2013 at 11:13
3 gold badges
12 silver badges
12 bronze badges
If your AWK doesn’t have strftime()
:
ping host | perl -nle 'print scalar(localtime), " ", $_' To redirect it to a file, use standard shell redirection and turn off output buffering:
ping host | perl -nle 'BEGIN {$|++} print scalar(localtime), " ", $_' > outputfile If you want ISO8601 format for the timestamp:
ping host | perl -nle 'use Time::Piece; BEGIN {$|++} print localtime->datetime, " ", $_' > outputfile
112 gold badges
651 silver badges
744 bronze badges
answered May 21, 2012 at 5:59
Dennis Williamson
90 gold badges
373 silver badges
438 bronze badges
From man ping
:
-D Print timestamp (unix time + microseconds as in gettimeofday) before each line. It will produce something like this:
[1337577886.346622] 64 bytes from 4.2.2.2: icmp_req=1 ttl=243 time=47.1 ms Then timestamp could be parsed out from the ping
response and converted to the required format with date
.

answered May 21, 2012 at 5:20
ДМИТРИЙ МАЛИКОВ
11 gold badges
78 silver badges
131 bronze badges
On OS X you can simply use the –apple-time option:
ping -i 2 --apple-time www.apple.com Produces results like:
10:09:55.691216 64 bytes from 72.246.225.209: icmp_seq=0 ttl=60 time=34.388 ms
10:09:57.687282 64 bytes from 72.246.225.209: icmp_seq=1 ttl=60 time=25.319 ms
10:09:59.729998 64 bytes from 72.246.225.209: icmp_seq=2 ttl=60 time=64.097 ms answered Aug 22, 2017 at 10:10
terminal + file output:
file output background:
answered May 27, 2016 at 6:02
1 gold badge
11 silver badges
9 bronze badges
My original submission was incorrect because it did not evaluate date for each line. Corrections have been made.
ping google.com | xargs -L 1 -I '{}' date '+%+: {}' Thu Aug 15 10:13:59 PDT 2013: PING google.com (74.125.239.103): 56 data bytes
Thu Aug 15 10:13:59 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=0 ttl=55 time=14.983 ms
Thu Aug 15 10:14:00 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=1 ttl=55 time=17.340 ms
Thu Aug 15 10:14:01 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=2 ttl=55 time=15.898 ms
Thu Aug 15 10:14:02 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=3 ttl=55 time=15.720 ms
Thu Aug 15 10:14:03 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=4 ttl=55 time=16.899 ms
Thu Aug 15 10:14:04 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=5 ttl=55 time=16.242 ms
Thu Aug 15 10:14:05 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=6 ttl=55 time=16.574 ms The -L 1 option causes xargs to process one line at a time instead of words.
answered Aug 9, 2013 at 0:52
3 silver badges
5 bronze badges
On macos you can do
ping --apple-time 127.0.0.1
The output looks like
16:07:11.315419 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.064 ms
16:07:12.319933 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.157 ms
16:07:13.322766 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.066 ms
16:07:14.324649 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.148 ms
16:07:15.328743 64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.092 ms answered Oct 19, 2017 at 22:10
3 gold badges
41 silver badges
53 bronze badges
The simpler option is just using ts
from moreutils (fairly standard on most distros).
$ ping 1.1.1.1 | ts
Feb 13 12:49:17 PING 1.1.1.1 (1.1.1.1) 56 bytes of data.
Feb 13 12:49:17 64 bytes from 1.1.1.1: icmp_seq=1 ttl=57 time=5.92 ms
Feb 13 12:49:18 64 bytes from 1.1.1.1: icmp_seq=2 ttl=57 time=5.30 ms
Feb 13 12:49:19 64 bytes from 1.1.1.1: icmp_seq=3 ttl=57 time=5.71 ms
Feb 13 12:49:20 64 bytes from 1.1.1.1: icmp_seq=4 ttl=57 time=5.86 ms ping 1.1.1.1 -I eth0 | ts "[%FT%X]" Allows for the same strftime format strings as the shell/ date
workaround.

34 золотых знака
152 серебряных значка
186 бронзовых знаков
ответил 13 февраля 2021 в 0:32
20 золотых значков
237 серебряных значков
291 бронзовый знак
ping www.google.com | while read endlooop; do echo "$(date): $endlooop"; done Возвращает что-то вроде:
Wednesday 18 January 09:29:20 AEDT 2017: PING www.google.com (216.58.199.36) 56 bytes of data.
Wednesday 18 January 09:29:20 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=1 ttl=57 time=2.86 ms
Wednesday 18 January 09:29:21 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=2 ttl=57 time=2.64 ms
Wednesday 18 January 09:29:22 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=3 ttl=57 time=2.76 ms
Wednesday 18 January 09:29:23 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=4 ttl=57 time=1.87 ms
Wednesday 18 January 09:29:24 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=5 ttl=57 time=2.45 ms

ответил 17 января 2017 в 16:40
1 серебряный значок
1 бронзовый значок
Передать результат в awk
:
ping host | awk '{if($0 ~ /bytes from/){print strftime()"|"$0}else print}' ответил 21 мая 2012 в 5:28

Вы можете создать функцию в своем ~/.bashrc
файл, так что вы получите команду ping ping-t
на вашей консоли:
function ping-t { ping "$1" | while read pong; do echo "$(date): $pong"; done; } Теперь вы можете вызвать это на консоли:
ping-t example.com Сб 31 марта 12:58:31 CEST 2018: PING example.com (93.184.216.34) 56
байт данных.
Сб, 31 марта, 12:58:31 CEST 2018: 64 байта из 93.184.216.34 (93.184.216.34): icmp_seq=1 ttl=48 time=208 ms
Сб, 31 марта, 12:58:32 CEST 2018: 64 байта из 93.184.216.34 (93.184.216.34): icmp_seq=2 ttl=48 time=233 ms
ответил 31 марта 2018 в 10:59
31 золотой значок 134 серебряных значка 226 бронзовых знаков
Вы не указали отметку времени или интервал времени, в течение которого вам потребуется такой вывод, поэтому я посчитал это бесконечным циклом. Вы можете изменить его соответственно в соответствии с вашими потребностями.
while true
do echo -e "`date`|`ping -n -c 1 <IP_TO_PING>|grep 'bytes from'`" sleep 2
done

ответил 21 мая 2012 в 18:25
1 золотой значок
12 серебряных значков
19 бронзовых знаков
ping -D -n -O -i1 -W1 8.8.8.8 while true; do \ ping -n -w1 -W1 -c1 8.8.8.8 \ | grep -E "rtt|100%" \ | sed -e "s/^/`date` /g"; \ sleep 1; \
done ответил 31 окт 2014 в 2:16
Мне также нужно это, чтобы отслеживать проблему с сетью для моей проблемы с зеркалированием базы данных. Я использую код команды, как показано ниже:
ping -t Google.com|cmd /q /v /c "(pause&pause)>nul & for /l %a in () do (set /p "data=" && echo(!date! !time! !data!)&ping -n 2 Google.com>nul" >C:\pingtest.txt Вам просто нужно изменить Google.com на имя вашего сервера. Он отлично работает для меня. и не забудьте остановить это, когда закончите. Файл pingtest.txt будет увеличиваться на 1 КБ в секунду (примерно).
Спасибо за raymond.cc. https://www.raymond.cc/blog/timestamp-ping-with-hrping/
ответил 15 сен 2017 в 13:35
Попробуйте эту строчку.
while sleep 1;do echo "$(date +%d-%m-%y-%T) $(ping -c 1 whatever.com | gawk 'FNR==2{print "Response from:",$4,$8}')" | tee -a /yourfolder/pingtest.log;done Вам придется отменить это с помощью ctrl-c
то.
ответил 22 ноя 2016 в 1:50

просто используйте sed и цикл:
ping google.com|while read; do sed -r "s/(.*)/$(date) \1/g"<<<"$REPLY";done ответил 13 фев 2021 в 3:00
5 серебряных значков
12 бронзовых знаков



