On Fri, Jul 8, 2011 at 5:58 PM, Kenneth Porter shiva@sewingwitch.com wrote:
I have a Bash script, currently run a couple times an hour from cron, that pulls data from an old Windows DB by rsync, converts it to SQL, and injects it into a MySQL DB for display in a LAMP-based app. (Make and Perl are also involved to minimize the number of tables touched and to clean up the SQL generated by Pxlib.)
I'd like to add the ability to refresh the data immediately from the web app, but I don't want it to trample on the periodic script and corrupt the data.
I figure the ideal way to do this is to run the script in a loop in its own process, waiting on a semaphore that times out at the refresh period, and poke the semaphore from the web app to have it run before the next periodic cycle.
Are there existing frameworks to wrap this kind of thing in? Something that handles starting the loop at server startup, shutting it down at server halt, and handles the IPC between the web server and the service script.
Web page creates a temp file saying "update", then cron job runs once a minute looking for that file, kicks off update script, then deletes temp file. If you don't want to wait a full minute you could use 'incron' to monitor the temp directory and kick the update right away. Seems better than having something in a loop constantly checking.
-☙ Brian Mathis ❧-
--On Friday, July 08, 2011 8:23 PM -0400 Brian Mathis brian.mathis+centos@betteradmin.com wrote:
If you don't want to wait a full minute you could use 'incron' to monitor the temp directory and kick the update right away. Seems better than having something in a loop constantly checking.
incron sounds promising. I could use the regular cron to push a signal (ie. touch a file) at the regular interval, whereupon incron launches the existing script, and the webscript can touch the signal file when I need the script run right away. Will incron not run the script again if it's already running? Will it queue the file event until the handler exits?
On 7/11/11 9:16 PM, Kenneth Porter wrote:
--On Friday, July 08, 2011 8:23 PM -0400 Brian Mathis brian.mathis+centos@betteradmin.com wrote:
If you don't want to wait a full minute you could use 'incron' to monitor the temp directory and kick the update right away. Seems better than having something in a loop constantly checking.
incron sounds promising. I could use the regular cron to push a signal (ie. touch a file) at the regular interval, whereupon incron launches the existing script, and the webscript can touch the signal file when I need the script run right away. Will incron not run the script again if it's already running? Will it queue the file event until the handler exits?
You really need to make the script do its own locking so it doesn't matter if cron runs it or a dozen web users click the 'run now' buttons at once.