doesn't Apache HTTP 2.0 run as a service on windows?

On 12/19/05, David Pratt <[EMAIL PROTECTED]> wrote:
>
> I was doing a bit of searching today to see what I could dig up to
> improve how the development server operates on Windows. I found this
> which is pretty close to what I want to do. It comes from Turbo Gears.
> Is there any interest from anyone else to help me implement the light
> development server as a Window Service?
>
> I plan to rewrite this a bit for Django. I just think it would be
> cleaner and logs could be written to file as opposed to stdout. I am not
> so familiar with Windows but more Mac and Unix which is reason it would
> be nice for someone with Windows to help me out on this. I don't think
> it would require too much to provide this functionality. I think in
> light of the fact that most people are likely developing on windows
> boxes, it would be a plus. I looked at the httpserver code and I don't
> think it would much to fit this in.
>
> Regards,
> David
>
>  From Turbo Gears ...
>
> import cherrypy
> import pkg_resources
> pkg_resources.require("TurboGears")
>
> import sys
> import os
> from os.path import *
>
> import win32serviceutil
> import win32service
> from win32com.client import constants
>
> class TGWindowsService(win32serviceutil.ServiceFramework):
>      """TurboGears Windows Service helper class.
>
>      The TGWindowsService class contains all the functionality required
>      for running a TurboGears application as a Windows Service.  The only
>      user edits required for this class are located in the following class
>      variables:
>
>      _svc_name_:         The name of the service (used in the Windows
> registry).
>      _svc_display_name_: The name that will appear in the Windows
> Service Manager.
>      code_dir:           The full path to the base directory of the user's
>                          TG app code (usually where <project_name>-start.py
>                          and the *.cfg files are located).
>      root_class:         The fully qualified Root class name
>                          (e.g. wiki20.controllers.Root)
>      log_dir:            The desired location of the stdout and stderr
>                          log files.
>
>      For information on installing the application, please refer to the
>      documentation at the end of this module or navigate to the directory
>      where this module is located and type "service.py" from the command
>      prompt.
>      """
>
>      # -- START USER EDIT SECTION
>      # -- Users must edit this section before installing the service.
>      _svc_name_ = ''          # (Required) The name of the service.
>      _svc_display_name_ = ''  # (Required) The Service Manager display name.
>      code_dir = r''           # (Required) The base directory of the TG
> app code.
>      root_class = ''          # (Required) The fully qualified Root
> class name.
>      log_dir = r''            # (Optional) The log directory. Default =
> code_dir.
>      # -- END USER EDIT SECTION
>
>      def SvcDoRun(self):
>          """ Called when the Windows Service runs. """
>
>          self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
>          self.tg_init()
>          cherrypy.root = self.root()
>          self.ReportServiceStatus(win32service.SERVICE_RUNNING)
>          cherrypy.server.start()
>
>      def SvcStop(self):
>          """Called when Windows receives a service stop request."""
>
>          self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
>          cherrypy.server.stop()
>          self.ReportServiceStatus(win32service.SERVICE_STOPPED)
>
>      def tg_init(self):
>          """ Checks for the required data and initializes the
> application. """
>
>          if TGWindowsService.code_dir:
>              os.chdir(TGWindowsService.code_dir)
>              sys.path.append(TGWindowsService.code_dir)
>              # Redirect stdout and stderr to avoid buffer crashes.
>
>              sys.stdout = open(join(TGWindowsService.log_dir,
> 'stdout.log'),'a')
>              sys.stderr = open(join(TGWindowsService.log_dir,
> 'stderr.log'),'a')
>          else:
>              raise ValueError("""The code directory setting is missing.
>                                  The Windows Service will not run
>                                  without this setting.""")
>
>          if not TGWindowsService.root_class:
>              raise ValueError("""The fully qualified root class name must
>                                  be provided.""")
>
>          if not TGWindowsService.log_dir:
>              TGWindowsService.log_dir = '.'
>
>          if exists(join(TGWindowsService.code_dir, "setup.py")):
>              cherrypy.config.update(file="dev.cfg")
>          else:
>              cherrypy.config.update(file="prod.cfg")
>
>          # Set environment to production to disable auto-reload.
>          cherrypy.config.update({'global': {'server.environment':
> 'production'},})
>
>          # Parse out the root class information and set it to self.root
>          full_class_name = TGWindowsService.root_class
>          last_mark = full_class_name.rfind('.')
>
>          if (last_mark < 1) or (last_mark + 1) == len(full_class_name):
>              raise ValueError("""The user-defined class name is invalid.
>                                  Please make sure to include a fully
>                                  qualified class name for the root_class
>                                  value (e.g. wiki20.controllers.Root).""")
>
>          package_name = full_class_name[:last_mark]
>          class_name = full_class_name[last_mark+1:]
>          exec('from %s import %s as Root' % (package_name, class_name))
>          self.root = Root
>
> if __name__ == '__main__':
>      # The following are the most common command-line arguments that are
> used
>      # with this module:
>      #  service.py install (Installs the service with manual startup)
>      #  service.py --startup auto install (Installs the service with
> auto startup)
>      #  service.py start (Starts the service)
>      #  service.py stop (Stops the service)
>      #  service.py remove (Removes the service)
>      #
>      # For a full list of arguments, simply type "service.py".
>      win32serviceutil.HandleCommandLine(TGWindowsService)
>


--
[EMAIL PROTECTED] -- blog: http://feh.holsman.net/ -- PH: ++61-3-9877-0909

If everything seems under control, you're not going fast enough. -
Mario Andretti

Reply via email to