linux以守護進程啟動
㈠ linux守護進程管理神器-supervisor
supervisor是一款由Python開發的進程管理工具,其核心功能在於通過服務端supervisord管理子進程,提供啟動、關閉、重啟和查看進程狀態的能力。
這款工具的獨特之處在於能夠通過Web界面直觀地監控並控制進程狀態,用戶可以在Web頁面上輕松地啟動或停止服務。為了更直觀地理解supervisor的作用,下圖展示了如何通過它對伺服器上的一些agent進行管理,以及對一些web服務進程進行監控,同時查看了簡單的啟動日誌。
安裝方面,由於supervisor是用Python編寫的,因此使用pip工具安裝最為便捷。對於CentOS系統,用戶也可以選擇通過yum來安裝,但推薦使用pip以獲取最新的版本和最佳兼容性。
對於希望確保服務在伺服器異常宕機後能夠快速恢復的用戶,開啟開機啟動功能尤為重要。雖然通過pip或yum安裝能夠實現基礎的安裝流程,但為了實現開機啟動,還需要進行額外的配置步驟。
配置過程包括服務端配置和子進程配置文件的創建與調整。服務端配置文件通常包含了一些默認設置,例如,web服務默認狀態為關閉。用戶可以根據實際需求,如內網服務的使用場景,決定是否開啟web服務。子進程配置文件則在目錄/etc/supervisord.d/*.ini中存放,這部分配置文件尤為關鍵,直接決定了子進程的行為和屬性。
以node_exporter為例,其配置文件可以展示如何添加環境變數以及調整特定參數。用戶還可以根據需要訪問supervisord.org網站,查閱更多詳細配置選項和最佳實踐。
在實際使用中,掌握命令操作是高效管理進程的關鍵。用戶可以通過執行`--help`命令了解特定命令的幫助文檔,從而快速獲取所需信息。對於日常操作而言,`supervisorctl`命令是執行進程式控制制操作的常用工具。
為了簡化管理流程,用戶可以將`supervisorctl`命令直接輸入終端,進入互動式控制界面,從而直接執行各種管理命令,如啟動、停止、重啟進程,或查看進程狀態等。
㈡ 如何以守護進程在linux系統下執行
編寫守護進程程序的要點:
(1)讓程序在後台執行。方法是調用fork()產生一個子進程,然後使父進程退出。
(2)調用setsid()創建一個新對話期。控制終端、登錄會話和進程組通常是從父進程繼承下來的,守護進程要擺脫它們,不受它們的影響,方法是調用setsid()使進程成為一個會話組長。setsid()調用成功後,進程成為新的會話組長和進程組長,並與原來的登錄會話、進程組和控制終端脫離。
(3)禁止進程重新打開控制終端。經過以上步驟,進程已經成為一個無終端的會話組長,但是它可以重新申請打開一個終端。為了避免這種情況發生,可以通過使進程不再是會話組長來實現。再一次通過fork()創建新的子進程,使調用fork的進程退出。
(4)關閉不再需要的文件描述符。子進程從父進程繼承打開的文件描述符。如不關閉,將會浪費系統資源,造成進程所在的文件系統無法卸下以及引起無法預料的錯誤。首先獲得最高文件描述符值,然後用一個循環程序,關閉0到最高文件描述符值的所有文件描述符。
(5)將當前目錄更改為根目錄。
(6)子進程從父進程繼承的文件創建屏蔽字可能會拒絕某些許可權。為防止這一點,使用unmask(0)將屏蔽字清零。
(7)處理SIGCHLD信號。對於伺服器進程,在請求到來時往往生成子進程處理請求。如果父進程不等待子進程結束,子進程將成為僵屍進程(zombie),從而佔用系統資源。如果父進程等待子進程結束,將增加父進程的負擔,影響伺服器進程的並發性能。在Linux下可以簡單地將SIGCHLD信號的操作設為SIG_IGN。這樣,子進程結束時不會產生僵屍進程。