I am running a few Ubuntu VMs on a MacBook Pro host.

Whenever I pause a VM or save its state to disk, the next time I restart it, the system clock goes out of sync.

Is there a way for the VM to know it has just been resumed, and run a command? (for example, running ntpdate -u time.nist.gov as root would do the trick)

I tried modifying the scripts in /etc/pm/sleep.d, but these don't appear to be called on VM suspend/resume.

link|improve this question

80% accept rate
For this particular case, shouldn't the Guest Additions do this automatically? – Mechanical snail Sep 9 '11 at 21:54
@Mechanical snail, actually you might be right. I don't remember if I installed the guest additions on these VMs. (never thought to do that because they don't run a GUI) You should make this an answer. – Mike Sep 9 '11 at 23:03
@Mechanical snail, good sign: I did mkdir /media/cdrom ; mount /dev/cdrom /media/cdrom ; cd /media/cdrom ; ./VBoxLinuxAdditions.run and it updated the guest additions from 4.0.10 to 4.0.12 and synchronized the clock. Good so far, but I guess I did have them installed before. (maybe there's a bug...) Now I'll test a save/resume cycle. – Mike Sep 9 '11 at 23:08
@Mechanical snail, clock sync now works. Thanks! If you make this an answer I'll accept it. – Mike Sep 9 '11 at 23:10
feedback

3 Answers

up vote 2 down vote accepted

For this particular use, the Guest Additions is supposed to synchronize the VM's clock automatically. (See "Time synchronization" at http://www.virtualbox.org/manual/ch04.html, or if you want to customize it, http://www.virtualbox.org/manual/ch09.html#changetimesync.) It's possible that this updating might have stopped working when using an older version of the guest additions than the VirtualBox version on the host.

To install or update the Guest Additions, mount the Guest Additions CD image using the relevant menu command on the host, and run the script from the CD on the guest. For details see the directions at http://www.virtualbox.org/manual/ch04.html#idp11850096.

link|improve this answer
feedback

You can use the crontab within linux if you want, it's not a full proof fix but you can set it so it runs every 5 minutes if you want which will execute the command you need, so updating the time with the server.

This blog post shows how to use the crontab. Also you can look at the CronHowTo @ Ubuntu Documentation

It might be useful for you.

link|improve this answer
Yeah, I actually thought about using crontab. I think that might be the workaround I'll have to use. But I don't want it to run constantly. Only when it wakes up from sleep. The laptop doesn't have consistent network access, and I don't want it constantly probing for the time server. – Mike Sep 1 '11 at 0:10
It shouldn't matter so much, it wouldn't really be slowing down using the machine, as it is a service right – Sandeep Bansal Sep 1 '11 at 0:18
Well, there's the problem that it will try and fail to get a connection sometimes. But there's also the problem that I would have to wait the 5 minutes (or whatever) after I started up the VM to continue working. The reason I care is that I am running programs that are sensitive to timestamps, so I'd rather it be event-driven than be the guy who annoys NIST by pounding their server with an NTP request every 5 seconds. ;-) – Mike Sep 1 '11 at 1:23
I get what you mean, You could try what's listed in this article, rickguyer.com/… but with setting that value as 0 instead of 1? – Sandeep Bansal Sep 1 '11 at 1:29
Thanks, I tried it and it didn't work. (maybe it doesn't work on OS X hosts?) – Mike Sep 1 '11 at 2:00
show 3 more comments
feedback

Enter your command in /etc/rc.local. Used to work last time I checked (which was 5 yrs back :-| )

link|improve this answer
No, you misunderstood the question - rc.local runs on boot, not on resuming VM state from disk. – Mike Sep 9 '11 at 23:02
oops. Yeah, i thought he meant boot. – I J Sep 10 '11 at 21:59
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.