While ntp may be a great protocol, I find it quite bloated and slow for the simple purpose of just setting a local date and time to a reference clock. I do not need 20ms accuracy on a notebook's clock . Thus I use(d) rdate for a decade now but the public rdate servers are slowly dying out. So I'm replacing it more and more with htpdate which works quite nicely. It's written in C and a perl alternative is available on the author's site. There is also a forked windows version of it available.
Developing a bit larger bash script (which syncs a few servers), I wondered whether I could realize the time sync part in bash as well.
It's quite possible:
- # open a tcp connection to www.google.com
- exec 3<>/dev/tcp/www.google.com/80
- # say hello HTTP-style
- echo -e "GET / HTTP/1.0\n\n">&3
- # parse for a Date: line and with a bit of magic throw the date-string at the date command
- LC_ALL=C LANG=en date --rfc-2822 --utc -s "$(head <&3 | grep -i "Date: " | sed -e s/Date\:\ //I)"
- # close the tcp connection
- exec 3<&-