Search Members Help

» Welcome Guest
[ Log In :: Register ]

Mini-ITX Boards Sale, Fanless BareBones Mini-ITX, Bootable 1G DSL USBs, 533MHz Fanless PC <-- SALE $200 each!
Get The Official Damn Small Linux Book. DSL Market , Great VPS hosting provided by Tektonic
Pages: (3) </ [1] 2 3 >/

[ Track this topic :: Email this topic :: Print this topic ]

reply to topic new topic new poll
Topic: simple script to set system clock, not exact as ntp client but good enough< Next Oldest | Next Newest >
newOldUser Offline





Group: Members
Posts: 241
Joined: Oct. 2004
Posted: Feb. 17 2007,17:18 QUOTE

Here's the background.... I have an old machine running DSL that I use as a server for various projects.  I reboot it every month or so to check the hard drives. I've noticed that after a few days the time starts go a little wonky. Just a little bit more each day.  

So I was looking for something that I could automatically run each day to set the time.  There were some good suggestions on the forum about installing an NTP client. I'm sure it's probably easy to do and works fine but I decided to try my hand at writing a script to do it.

It's not as acurate as an NTP client but it's close enough for what I need and it will work in native DSL.

Code Sample


#! /bin/bash
version="1.00"
scriptName="getTime.sh"
#
# This script gets time information from time.nist.gov in
# universal time format. It then rearranges it into
# the format that the date command uses MMDDhhmmCCYY.ss
# and issues the date command as super user.
#
# An internet connection must be available
#
#  sample of returned information follows
#54144 07-02-13 16:14:43 00 0 0  95.3 UTC(NIST) *
#0----0----1----1----2----2----3----3----4----4----5
#0----5----0----5----0----5----0----5----0----5----0
#
vFound=""
telnet time.nist.gov 13 > nistTime.txt
date
vFound=$(cat nistTime.txt | grep "UTC(NIST)")
if [ ! -z "$vFound" ]; then
    vDateTime=${vFound:9:2}${vFound:12:2}${vFound:15:2}${vFound:18:2}"20"${vFound:6:2}"."${vFound:21:2}
     sudo date -u "$vDateTime"
     #echo "$vDateTime"
fi
date



I thought about setting the hardware clock also but then that might mess people up who dual-boot to windows.

One thing that I wasn't able to solve was setting the telnet timeout.  How long the script waits trying to connect to time.nist.gov if my internet connection is down or if time.nist.gov is down?  I'd like to be able to set a timeout parameter of 15 seconds but I don't see how. Anyone know how to change it?

-Enjoy


--------------
======== Note =========
The DSL Forum Search default is 'OR'
If you search for "cat dog" you will get all "cat" posts and all "dog" posts.
If you search for "cat AND dog" you will only find results that contain BOTH "cat" and "dog"
Add '*' for wildcards, " cat* and dog* "
Back to top
Profile PM 
^thehatsrule^ Offline





Group: Members
Posts: 3275
Joined: July 2006
Posted: Feb. 17 2007,18:37 QUOTE

You could kill that process if there's no easy timeout solution...

Or you could do something like a test ping of that site first, before you proceed with the rest of the script.
Back to top
Profile PM 
roberts Offline





Group: Members
Posts: 4983
Joined: Oct. 2003
Posted: Feb. 18 2007,05:46 QUOTE

Reading this script and a request for how to handle timeout, made me think of such capability using Lua sockets.

So, just for fun, I cobbed together this little Lua socket program.

It is working well for me. I run it manually prefixed with sudo.
I did not call date using sudo as in newOldUser's original, as I call this lua program from /opt/bootlocal.sh

Now when I boot my machine, I have a much more accurate clock set.

You can see socket level programming is at a lower level than calling bash functions. But it does provide much more control.

Code Sample
#! /bin/lua
--[[
# This lua script based in part of the idea expressed in
# the bash script from newOldUser of the damnsmall linux forums
# by Robert Shingledecker - 2007/02/17
# This script gets time information from time.nist.gov in
# universal time format. It then rearranges it into
# the format that the date command uses MMDDhhmmCCYY.ss
# and issues the date command as super user.
#
# An internet connection must be available
#
#  sample of returned information follows
#54144 07-02-13 16:14:43 00 0 0  95.3 UTC(NIST) *
#1---0----1----1----2----2----3----3----4----4----5
#1---5----0----5----0----5----0----5----0----5----0
#
--]]
host = "time.nist.gov"
port = 13
target = {10,13,16,19,7,22}
date = ""

timeserver,err = socket.connect(host,port)
if err then
  print("Could not connect "..err)
  os.exit(1)
end
_,err = timeserver:send("anything\n")
if err then
  print("Error in sending "..err)
  os.exit(1)
end
timeserver:settimeout(0.10)
while 1 do
  line,err = timeserver:receive('*l')
  if err then
     print("Error in receiving "..err)
     os.exit(1)
  end
  if string.find(line,"UTC") then
     for i = 1, 6 do
        if i == 5 then date = date .. "20" end
        if i == 6 then date = date .. "." end
        date = date .. string.sub(line,target[i],target[i]+1)
     end
     os.execute("date -u "..date)
     os.exit(0)
  end
end


Edited by roberts on Feb. 20 2007,19:31
Back to top
Profile PM WEB 
WDef Offline





Group: Members
Posts: 798
Joined: Sep. 2005
Posted: Feb. 18 2007,12:25 QUOTE

One idea inspires another.

Off-topic, but good to see you around Newolduser :=)  I thought you'd vanished off the forum!
Back to top
Profile PM 
newOldUser Offline





Group: Members
Posts: 241
Joined: Oct. 2004
Posted: Feb. 18 2007,14:40 QUOTE

^thehatsrule^, thanks for the suggestion... I hadn't thought about doing a ping first. It's funny how my mind gets locked into doing something one way and other solutions get blocked.

Roberts, neat stuff... One of these days I'm going to learn LUA.

WDef,  Sorry about being offtopic... I'm never sure where to put these things that I write.  I have one or two other scripts that I need to pretty-up so I can share them. I had been putting them in the blogs but there are problems putting code in the blog area.  

I was gone for a while, but still using DSL. I've come back to find that we're up to version 3.something and all my machines are at version 2.3 or below.  Since I usually do a frugal install I'm hoping that upgrading will not be too difficult. I'm sure there are plenty of forum entries that will help me. :)


--------------
======== Note =========
The DSL Forum Search default is 'OR'
If you search for "cat dog" you will get all "cat" posts and all "dog" posts.
If you search for "cat AND dog" you will only find results that contain BOTH "cat" and "dog"
Add '*' for wildcards, " cat* and dog* "
Back to top
Profile PM 
11 replies since Feb. 17 2007,17:18 < Next Oldest | Next Newest >

[ Track this topic :: Email this topic :: Print this topic ]

Pages: (3) </ [1] 2 3 >/
reply to topic new topic new poll
Quick Reply: simple script to set system clock

Do you wish to enable your signature for this post?
Do you wish to enable emoticons for this post?
Track this topic
View All Emoticons
View iB Code