Something like this should be included in web2py. What do you think should be the right place?
On Saturday, 28 July 2012 01:24:04 UTC-5, Tim Richardson wrote: > > > > On Thursday, 26 July 2012 21:04:58 UTC+10, Tim Richardson wrote: >> >> I'm confused about this topic. >> I want to run the scheduler in the background, as a windows service. >> web2py is running as a windows service. >> From reading this group, it seems that web2py's built in cron is not a >> reliable way to start the scheduler if web2py is a service. >> >> I know little about windows services. I see there are a few python >> recipes for making a script into a service, but I'm starting to feel like >> I'm reinventing wheels. >> >> > I did it like this: > ''' > Created on 26/07/2012 > > @author: Tim > ''' > ''' > > Author: Alex Baker > Date: 7th July 2008 > Description : Simple python program to generate wrap as a service based > on example on the web, see link below. > > http://essiene.blogspot.com/2005/04/python-windows-services.html > > Usage : python aservice.py install > Usage : python aservice.py start > Usage : python aservice.py stop > Usage : python aservice.py remove > > C:\>python aservice.py --username <username> --password <PASSWORD> > --startup auto install > > ''' > > > import win32service > import win32serviceutil > import win32api > import win32con > import win32event > import win32evtlogutil > import os > import subprocess > > class aservice(win32serviceutil.ServiceFramework): > > _svc_name_ = "Web2Py Background Scheduler" > _svc_display_name_ = "Web2Py scheduler for accpac_web_orders" > _svc_description_ = "handles long running Web2Py tasks" > > def __init__(self, args): > win32serviceutil.ServiceFramework.__init__(self, args) > self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) > > > def SvcStop(self): > self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) > win32event.SetEvent(self.hWaitStop) > > def SvcDoRun(self): > import servicemanager > servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, > servicemanager.PYS_SERVICE_STARTED,(self._svc_name_, '')) > > self.timeout = 3000 > > win32api.WinExec('pythonw.exe d:\web2py\web2py.py -K > accpac_web_orders') > self.timeout = 3000 > > while 1: > # Wait for service stop signal, if I timeout, loop again > rc = win32event.WaitForSingleObject(self.hWaitStop, self.timeout) > # Check to see if self.hWaitStop happened > if rc == win32event.WAIT_OBJECT_0: > # Stop signal encountered > servicemanager.LogInfoMsg(_svc_name + " - STOPPED") > break > else: > servicemanager.LogInfoMsg( _svc_name + + " is alive and well" > ) > > def ctrlHandler(ctrlType): > return True > > if __name__ == '__main__': > win32api.SetConsoleCtrlHandler(ctrlHandler, True) > win32serviceutil.HandleCommandLine(aservice)Enter code here... > > > --