[Zope-Checkins] SVN: Zope/branches/2.12/src/Zope2/Startup/zopectl.py Fix zopectl status on Windows by borrowing from:
Chris Withers
chris at simplistix.co.uk
Fri Oct 30 14:26:59 EDT 2009
Log message for revision 105394:
Fix zopectl status on Windows by borrowing from:
http://svn.plone.org/svn/collective/buildout/plone.recipe.zope2instance/trunk/src/plone/recipe/zope2instance/ctl.py
Changed:
U Zope/branches/2.12/src/Zope2/Startup/zopectl.py
-=-
Modified: Zope/branches/2.12/src/Zope2/Startup/zopectl.py
===================================================================
--- Zope/branches/2.12/src/Zope2/Startup/zopectl.py 2009-10-30 17:30:18 UTC (rev 105393)
+++ Zope/branches/2.12/src/Zope2/Startup/zopectl.py 2009-10-30 18:26:59 UTC (rev 105394)
@@ -51,15 +51,16 @@
WIN = False
if sys.platform[:3].lower() == "win":
WIN = True
+ import pywintypes
+ import win32service
import win32serviceutil
from nt_svcutils import service
def do_windows(command):
def inner(self,arg):
- INSTANCE_HOME = self.options.directory
- name = 'Zope'+str(hash(INSTANCE_HOME.lower()))
- display_name = 'Zope instance at '+INSTANCE_HOME
+ name = self.get_service_name()
+ display_name = 'Zope instance at '+self.options.directory
# This class exists only so we can take advantage of
# win32serviceutil.HandleCommandLine, it is never
@@ -222,16 +223,26 @@
## START OF WINDOWS ONLY STUFF
if WIN:
+
+ def get_service_name(self):
+ return 'Zope'+str(hash(self.options.directory.lower()))
+
def get_status(self):
- # get_status from zdaemon relies on *nix specific socket handling.
- # We just don't support getting the status and sending actions to
- # the control server on Windows. This could be extended to ask for
- # the status of the Windows service though
- self.zd_up = 0
- self.zd_pid = 0
- self.zd_status = None
- return
+ sn = self.get_service_name()
+ try:
+ stat = win32serviceutil.QueryServiceStatus(sn)[1]
+ self.zd_up = 1
+ except pywintypes.error, err:
+ if err[0] == 1060:
+ # Service not installed
+ stat = win32service.SERVICE_STOPPED
+ self.zd_up = 0
+ else:
+ raise
+ self.zd_pid = (stat == win32service.SERVICE_RUNNING) and -1 or 0
+ self.zd_status = "args=%s" % self.options.program
+
do_start = do_windows('start')
do_stop = do_windows('stop')
do_restart = do_windows('restart')
More information about the Zope-Checkins
mailing list