Python的win32serviceutil之疑似BUG

來源:互聯網
上載者:User

鄭昀@玩聚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參數去掉不傳即可,或傳Null 字元串。
即:
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服務時,不存在此問題。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.