said Jim via tde-users:
| On Sun, Sep 22, 2024 at 18:23 (-0300), Jim via tde-users wrote:
| > On Sun, Sep 22, 2024 at 19:56 (+0000), dep via tde-users wrote:
| >> Some months ago I asked here if there were a way to log my ISP's
| >> downtime, and got a useful answer. Today I've been attempting to
| >> refine it a bit, and there is some progress, but not success.
| >>
| >> Here's what I have:
| >>
| >> [code]
| >> #!/bin/bash
| >> #monitor frontier communications downtime
| >> ping -i 3 -O -D 1.1.1.1 | while read row
| >> do
| >> awk '{ sub(/[0-9]{10}/, strftime("%Y-%m-%d %H:%M:%S",
| >> substr($0,2,10))) } 1' <<< "$row"| tee
~/frontier_downtime.log
| >> done
| >> [/code]
| >>
| >> Most of it is simply converting internet time to human time, because
| >> I might have to use it to support a complaint. It runs fine in a
| >> terminal, a nice ping and result every three seconds, but only writes
| >> the first line, the first ping result, to the logfile. (And yes, ir's
| >> probably sloppy.)
| >
| > I don't think that is true. I think it is writing the most recent
| > ping result to the log file.
| >
| >> What do I have wrong?
| >
| > You didn't use the '-a' option to tee. So each invocation of tee
| > over-writes the file with the most recent line.
| >
| > I might suggest something like
| >
| > ping -i 3 -O -D 1.1.1.1 | while read row
| > do
| > awk '{ sub(/[0-9]{10}/, strftime("%Y-%m-%d %H:%M:%S",
| > substr($0,2,10))) } 1' <<< "$row"
| > done | tee -a ~/frontier_downtime.log
| >
| > to avoid calling a new invocation of tee for every ping result.
| >
| >> Bonus question: any way to keep it running with the terminal closed?
| >> I can't even use & to free the terminal; I'd like to start the
thing
| >> and have it cook merrrily away without a terminal open or even
| >> minimized, and use top or killall to dispose of it if that becomes
| >> necessary.
| >>
| >> I'm pretty sure I'm missing something obvious.
| >
| > I think maybe you are.
| >
| > touch ~/frontier_downtime.log
| > ping -i 3 -O -D 1.1.1.1 | while read row
| > do
| > awk '{ sub(/[0-9]{10}/, strftime("%Y-%m-%d %H:%M:%S",
| > substr($0,2,10))) } 1' <<< "$row"
| > done >> ~/frontier_downtime.log &
| >
| > You should be able to close that terminal after running that without
| > anything bad happening. And if you want to see that is going on from
| > some terminal, you can use
| > tail -f ~/frontier_downtime.log
| > in that terminal.
|
| After I sent that off, it occurred to me that you don't need a while
| loop at all...
|
| These two commands should all be on one line, just in case your mail
| reader breaks the lines.
|
| ping -i 3 -O -D 1.1.1.1 | awk '{ sub(/[0-9]{10}/, strftime("%Y-%m-%d
| %H:%M:%S", substr($0,2,10))) } 1' | tee -a ~/frontier_downtime.log
|
| Have you thought about losing the microseconds? It probably isn't all
| that interesting.
|
| ping -i 3 -O -D 1.1.1.1 | awk '{ sub(/[0-9]{10}.[0-9]{6}/,
| strftime("%Y-%m-%d %H:%M:%S", substr($0,2,10))) } 1' | tee -a
| ~/frontier_downtime.log
Thanks very much. The last one that works here does contain the while.
Though getting rid of the microseconds is, yes, something I'd wished for,
I didn't know the syntax to do it. I still don't, apparently!
--
dep
Pictures:
http://www.ipernity.com/doc/depscribe/album
Column:
https://ofb.biz/author/dep/