本文共 1294 字,大约阅读时间需要 4 分钟。
@ 20090515
1、现象:
用Python的,如下代码一般是没问题的。
import win32serviceutil
def service_manager(action, machine, service): if action == 'stop': win32serviceutil.StopService(service, machine) elif action == 'start': win32serviceutil.StartService(service, machine) elif action == 'restart': win32serviceutil.RestartService(service, machine) elif action == 'status': if win32serviceutil.QueryServiceStatus(service, machine)[1] == 4: print "%s is happy" % service else: print "%s is being a PITA" % service
但控制Apache Service时,会出现一个很怪的现象。
譬如运行这么简单的语句:
import win32serviceutil
win32serviceutil.StartService("Apache2.2","localhost")
顺利执行后,停止的Apache服务并没有被启动。
此时,Windows事件日志就会报告这种错误:事件类型: 错误 事件来源: Apache Service 事件种类: 无 事件 ID: 3299 The Apache service named reported the following error: >>> Usage: C:""Apache2.2""bin""httpd.exe [-D name] [-d directory] [-f file]
同样,win32serviceutil.RestartService 函数虽然可以先正常地停止掉Apache服务,但试图启动时仍遇到同样的错误。
在多台服务器(Windows2003+SP2)和我本机(WindowsXP+SP2)都可以重现。
2、解决:
把machine参数去掉不传即可,或传空字符串。
即: win32serviceutil.StartService("Apache2.2") 或win32serviceutil.StartService("Apache2.2","")
可以正常启动本机的Apache,这样无法遥控域内其他服务器了。
3、更多: 1:win32serviceutil.StartService(service, '-w -n "Apache2.2" -k start')这样不传machine参数,只设定服务启动的传入参数也不行。
2:对于 win32serviceutil.StopService 函数,停止Apache等Windows服务时,不存在此问题。
转载地址:http://nnczl.baihongyu.com/