I want to save my Pharo image every hour on the hour automatically.
How would you make this automatic within the image?
I've seen the Pier project do this. But I'm not sure how they do it.
TIA
I want to save my Pharo image every hour on the hour automatically.
How would you make this automatic within the image?
I've seen the Pier project do this. But I'm not sure how they do it.
TIA
There is the Scheduler project on SqueakSource that looks like cron for Smalltalk. From the overview:
"Start a new task scheduler and keep it around" scheduler := TaskScheduler new. scheduler start. "Let's save the image every hour" scheduler do: [Smalltalk snapshot: true andQuit: false] every: 60 minutes.
You could combine that with the blocking code or OSProcess's saveImageInBackgroundNicely mentioned above and have a nice easy solution.
Result of a discussion on the mailing list, with some icing around to run it only hourly:
[[self blockUI.
self doUpdate.
SmalltalkImage current snapshot: true andQuit: false.
self unblockUI.
(Delay forDuration: (Duration hours: 1)) wait] repeat] fork
UnixProcess saveImageInBackgroundNicely
from OSProcess that can save an image using a background Unix process. You may prefer using this if you don't want the image to block every hour. –
Oesophagus There is the Scheduler project on SqueakSource that looks like cron for Smalltalk. From the overview:
"Start a new task scheduler and keep it around" scheduler := TaskScheduler new. scheduler start. "Let's save the image every hour" scheduler do: [Smalltalk snapshot: true andQuit: false] every: 60 minutes.
You could combine that with the blocking code or OSProcess's saveImageInBackgroundNicely mentioned above and have a nice easy solution.
You can do it and it might work just fine.
But I wouldn't do it.
Not fot persistence in production.
Why?
Because images are like your session in your laptop. Saving your image is like putting your laptop to sleep: it persists everything.
And in the long run, some state will have some unexplainable shit that can complicate something and you will need to do a hard reboot.
It doesn't help to try to be perfectionist about it (or maybe it does but is certainly not economic). It will just happen and rebooting your laptop is the cheap solution to have fresh state. But that for your smalltalk app may not be that cheap.
A hard reboot in smalltalk will mean that you have to take a fresh image and load again all your code (it can be automated but experience tells that could be time consuming).
© 2022 - 2024 — McMap. All rights reserved.