本發(fā)明涉及nginx技術(shù)領(lǐng)域,特別是涉及一種nginx支持服務(wù)控制管理器的方法。
背景技術(shù):
nginx是一款著名的高性能開源Web與反向代理服務(wù)器,支持windows和linux操作系統(tǒng),因?yàn)樵趙indows系統(tǒng)上還不支持SCM(服務(wù)控制管理器),所以只能以控制臺方式運(yùn)行,但這樣并不是在后臺運(yùn)行,也不能在系統(tǒng)登錄前啟動。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是提供一種nginx支持服務(wù)控制管理器的方法,可以使得nginx在windows系統(tǒng)上支持服務(wù)控制管理器。
為了解決上述的技術(shù)問題,本發(fā)明的技術(shù)方案如下:
一種nginx支持服務(wù)控制管理器的方法,用于windows系統(tǒng),包括:所述windows系統(tǒng)創(chuàng)建邏輯線程;在nginx的管理進(jìn)程的邏輯線程上,所述邏輯線程調(diào)用服務(wù)主函數(shù);所述服務(wù)主函數(shù)調(diào)用第一委托主函數(shù);所述第一委托主函數(shù)調(diào)用服務(wù)初始化模塊;在服務(wù)初始化模塊中進(jìn)行nginx的服務(wù)初始化。
進(jìn)一步,所述服務(wù)主函數(shù)調(diào)用第一委托主函數(shù)的過程包括:所述服務(wù)主函數(shù)輸入is_scm為1,is_scm為新添加的參數(shù);當(dāng)所述第一委托主函數(shù)返回后,更新服務(wù)狀態(tài)為已停止。
進(jìn)一步,所述第一委托主函數(shù)調(diào)用服務(wù)初始化模塊的過程包括:判斷is_scm是否為0;若為0,則顯示nginx的版本和幫助信息,并初始化log模塊;若不為0,則初始化log模塊;判斷is_scm是否為1;若為1,則所述第一委托主函數(shù)調(diào)用服務(wù)初始化模塊,然后判斷is_scm是否為0;若不為1,則判斷is_scm是否為0;若為0,則測試nginx的配置和處理信號;若不為0,則更新nginx的服務(wù)狀態(tài)為正在運(yùn)行。
進(jìn)一步,所述在服務(wù)初始化模塊中進(jìn)行服務(wù)初始化的過程包括:注冊進(jìn)程退出處理器;注冊服務(wù)控制處理器;在所述服務(wù)初始化模塊內(nèi)設(shè)置nginx的服務(wù)狀態(tài)為正在啟動。
進(jìn)一步,還包括:所述windows系統(tǒng)啟動nginx的所述管理進(jìn)程;在所述管理進(jìn)程中的第一主線程調(diào)用第一主函數(shù);當(dāng)發(fā)生用戶操作時(shí),所述第一主線程調(diào)用服務(wù)控制處理器。
進(jìn)一步,所述在所述管理進(jìn)程中的第一主線程調(diào)用第一主函數(shù)的步驟包括:初始化服務(wù)啟動表;啟動服務(wù)控制調(diào)度程序。
進(jìn)一步,在所述服務(wù)控制處理器內(nèi),還包括:用戶請求停止nginx的服務(wù);若停止,則更新nginx的服務(wù)狀態(tài)為正在停止,并發(fā)送信號通知所有工作進(jìn)程退出;若沒有停止,則返回。
進(jìn)一步,還包括:在所述管理進(jìn)程中創(chuàng)建工作進(jìn)程;在所述工作進(jìn)程中的第二主線程調(diào)用第二主函數(shù);所述第二主函數(shù)調(diào)用第二委托主函數(shù)。
進(jìn)一步,所述第二主函數(shù)調(diào)用第二委托主函數(shù)的過程包括:初始化nginx的服務(wù)啟動表;啟動服務(wù)控制調(diào)度程序;判斷是否以控制臺方式運(yùn)行;若是,則輸入is_scm為0,并調(diào)用第二委托主函數(shù);若不是,則所述第二委托主函數(shù)返回。
進(jìn)一步:is_scm用于標(biāo)識程序運(yùn)行方式,若is_scm不為0,則表示以服務(wù)控制管理器方式運(yùn)行,若is_scm為0,則表示以控制臺方式運(yùn)行。
與現(xiàn)有技術(shù)相比,本發(fā)明包括以下優(yōu)點(diǎn):
1、本發(fā)明實(shí)施例的方法通過引入第一委托主函數(shù),由邏輯線程代替了現(xiàn)有技術(shù)中nginx的管理進(jìn)程,使得nginx以服務(wù)控制管理器的方式運(yùn)行,并兼容了控制臺運(yùn)行方式。
2、本發(fā)明實(shí)施例的方法使用進(jìn)程退出處理器,統(tǒng)一報(bào)告nginx服務(wù)狀態(tài)為已停止。
附圖說明
圖1是本發(fā)明實(shí)施例的nginx支持服務(wù)控制管理器的方法的流程圖;
圖2是本發(fā)明實(shí)施例的nginx支持服務(wù)控制管理器的方法的服務(wù)主函數(shù)調(diào)用第一委托主函數(shù)步驟的流程圖;
圖3是本發(fā)明實(shí)施例的nginx支持服務(wù)控制管理器的方法的第一委托主函數(shù)調(diào)用服務(wù)初始化模塊步驟的流程圖;
圖4是本發(fā)明實(shí)施例的nginx支持服務(wù)控制管理器的方法的在服務(wù)初始化模塊中進(jìn)行nginx的服務(wù)初始化步驟的流程圖;
圖5是本發(fā)明另一實(shí)施例的nginx支持服務(wù)控制管理器的方法的流程圖;
圖6是本發(fā)明另一實(shí)施例的nginx支持服務(wù)控制管理器的方法的在管理進(jìn)程中的第一主線程調(diào)用第一主函數(shù)步驟的流程圖;
圖7是本發(fā)明另一實(shí)施例的nginx支持服務(wù)控制管理器的方法的在服務(wù)控制處理器內(nèi)的步驟的流程圖;
圖8是本發(fā)明又一實(shí)施例的nginx支持服務(wù)控制管理器的方法的流程圖;
圖9是本發(fā)明又一實(shí)施例的nginx支持服務(wù)控制管理器的方法的第二主函數(shù)調(diào)用第二委托主函數(shù)步驟的流程圖。
具體實(shí)施方式
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式對本發(fā)明作進(jìn)一步詳細(xì)的說明。
本發(fā)明中所述的“第一”和“第二”僅用于區(qū)分,沒有實(shí)際意義。
本發(fā)明實(shí)施例公開了一種nginx支持服務(wù)控制管理器的方法,用于windows系統(tǒng)。如圖1所示,為本發(fā)明實(shí)施例的nginx支持服務(wù)控制管理器的方法的流程圖。該方法具體包括如下的過程:
步驟S101:windows系統(tǒng)創(chuàng)建邏輯線程。
步驟S102:在nginx的管理進(jìn)程的邏輯線程上,邏輯線程調(diào)用服務(wù)主函數(shù)。
步驟S103:服務(wù)主函數(shù)調(diào)用第一委托主函數(shù)。
編寫程序時(shí),委托主函數(shù)可以用ngx_main表示。
步驟S104:第一委托主函數(shù)調(diào)用服務(wù)初始化模塊。
步驟S105:在服務(wù)初始化模塊中進(jìn)行nginx的服務(wù)初始化。
本發(fā)明實(shí)施例的方法通過引入第一委托主函數(shù),由邏輯線程代替了現(xiàn)有技術(shù)中nginx的管理進(jìn)程,使得nginx以服務(wù)控制管理器的方式運(yùn)行,并兼容了控制臺運(yùn)行方式。
具體的,如圖2所示,步驟S103的過程具體包括:
步驟S1031:服務(wù)主函數(shù)輸入is_scm為1。
其中,is_scm為新添加的參數(shù)。is_scm用于標(biāo)識程序運(yùn)行方式,若is_scm不為0,則表示以服務(wù)控制管理器方式運(yùn)行,若is_scm為0,則表示以控制臺方式運(yùn)行。
步驟S1032:當(dāng)?shù)谝晃兄骱瘮?shù)返回后,更新nginx的服務(wù)狀態(tài)為已停止。
邏輯線程代替了現(xiàn)有技術(shù)nginx的管理進(jìn)程,表明nginx已經(jīng)以服務(wù)控制管理器的方式運(yùn)行,所以以is_scm為1調(diào)用第一委托主函數(shù),當(dāng)?shù)谝晃兄骱瘮?shù)返回時(shí),就表明管理進(jìn)程退出了,應(yīng)該更新nginx的服務(wù)狀態(tài)為已停止,然后返回表明當(dāng)前服務(wù)結(jié)束了。
具體的,如圖3所示,步驟S104的過程具體包括:
步驟S1041:判斷is_scm是否為0。
若為0,則依次進(jìn)行步驟S1042和S1043;若不為0,則進(jìn)行步驟S1043。
步驟S1042:顯示nginx的版本和幫助信息。
步驟S1043:初始化log模塊。
由于服務(wù)初始化須將錯(cuò)誤記錄在log(日志)中,所以服務(wù)初始化模塊應(yīng)在初始化log模塊后調(diào)用。
步驟S1044:判斷is_scm是否為1。
若為1,則依次進(jìn)行步驟S1045和S1046。若不為1,則進(jìn)行步驟S1046。
步驟S1045:第一委托主函數(shù)調(diào)用服務(wù)初始化模塊。
步驟S1046:判斷is_scm是否為0。
若為0,則進(jìn)行步驟S1047;若不為0,則進(jìn)行步驟S1048。
步驟S1047:測試nginx的配置和處理信號。
步驟S1048:更新nginx的服務(wù)狀態(tài)為正在運(yùn)行。
具體的,如圖4所示,步驟S105的過程具體包括:
步驟S1051:注冊進(jìn)程退出處理器。
步驟S1052:注冊服務(wù)控制處理器。
步驟S1053:在服務(wù)初始化模塊內(nèi)設(shè)置nginx的服務(wù)狀態(tài)為正在啟動。
由于在nginx實(shí)現(xiàn)中,有多處出現(xiàn)異常錯(cuò)誤而直接退出,因此首先注冊了進(jìn)程退出處理器,在其內(nèi)報(bào)告服務(wù)狀態(tài)為已停止,這樣只要進(jìn)程退出了,在服務(wù)控制管理器上就能看到已停止的狀態(tài)了。
如圖5所示,為本發(fā)明另一實(shí)施例的nginx支持服務(wù)控制管理器的方法的流程圖。優(yōu)選的,與邏輯線程的流程配合,本發(fā)明另一實(shí)施例的方法還包括:
步驟S201:windows系統(tǒng)啟動nginx的管理進(jìn)程。
步驟S202:在管理進(jìn)程中的第一主線程調(diào)用第一主函數(shù)。
步驟S203:當(dāng)發(fā)生用戶操作時(shí),第一主線程調(diào)用服務(wù)控制處理器。
具體的,如圖6所示,步驟S202具體包括:
步驟S2021:初始化服務(wù)啟動表。
步驟S2022:啟動服務(wù)控制調(diào)度程序。
具體的,如圖7所示,在服務(wù)控制處理器內(nèi),該方法還具體包括:
步驟S301:用戶請求停止nginx的服務(wù)。
若停止,則進(jìn)行步驟S302;若沒有停止,則進(jìn)行步驟S303。
步驟S302:更新nginx的服務(wù)狀態(tài)為正在停止,并發(fā)送信號通知所有工作進(jìn)程退出。
步驟S303:返回。
該服務(wù)控制處理器內(nèi)的流程是一種異步執(zhí)行流。當(dāng)從服務(wù)控制管理器停止時(shí)會請求停止服務(wù),重新啟動服務(wù)時(shí)會先請求停止服務(wù)、再請求啟動服務(wù)。該步驟簡單地處理了停止請求,其它如暫停、繼續(xù)和關(guān)機(jī)等請求,可依具體需求擴(kuò)展。
如圖8所示,為本發(fā)明又一實(shí)施例的nginx支持服務(wù)控制管理器的方法的流程圖。優(yōu)選的,與邏輯線程的流程配合,本發(fā)明又一實(shí)施例的方法還包括:
步驟S401:在管理進(jìn)程中創(chuàng)建工作進(jìn)程。
步驟S402:在工作進(jìn)程中的第二主線程調(diào)用第二主函數(shù)。
步驟S403:第二主函數(shù)調(diào)用第二委托主函數(shù)。
具體的,如圖9所示,步驟S403的具體過程包括:
步驟S4031:初始化nginx的服務(wù)啟動表。
步驟S4032:啟動服務(wù)控制調(diào)度程序。
步驟S4033:判斷是否以控制臺方式運(yùn)行。
若是,則進(jìn)行步驟S4044;若不是,則進(jìn)行步驟S4045。
步驟S4044:輸入is_scm為0,并調(diào)用第二委托主函數(shù)。
步驟S4045:第二委托主函數(shù)返回。
如果以命令行啟動nginx,也就是管理進(jìn)程,或nginx產(chǎn)生工作進(jìn)程時(shí),那么以控制臺方式調(diào)用第二主函數(shù),進(jìn)而以is_scm為0調(diào)用第二委托主函數(shù),當(dāng)?shù)诙兄骱瘮?shù)返回時(shí),就表示管理進(jìn)程或工作進(jìn)程退出了。
以上對本發(fā)明所提供的技術(shù)方案,進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。