zoukankan      html  css  js  c++  java
  • Python的win32serviceutil之疑似BUG

    郑昀@玩聚SR 20090515

    1、现象:

    用Python的win32serviceutil控制Windows Service启动、停止、重启时,如下代码一般是没问题的。

    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服务时,不存在此问题。

  • 相关阅读:
    iOS-关于博客园博客到简书平台的迁移
    iOS-工作经验+资料分享(长期更新)
    iOS-公司开发者账号的申请和注册(原创+亲身+2016年申请+附带与邓白氏公司的往来邮件截图)
    iOS-HTML-02
    iOS-HTML-01
    iOS-保存照片或者视频到自定义相薄中以及读取数据
    iOS-UITableView的优化(纯手打原创)
    iOS-多线程之GCD(原创)
    iOS-绘图(Quartz2D)的简单使用(原创)
    iOS-Cocoapods
  • 原文地址:https://www.cnblogs.com/zhengyun_ustc/p/win32serviceutil.html
Copyright © 2011-2022 走看看