supervisor運行golang守護進程

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

最近在鼓搗golang守護進程的實現,無意發現了supervisor這個有意思的東西。supervisor是一個unix的系統進程管理軟體,可以用它來管理apache、nginx等服務,若服務掛了可以讓它們自動重啟。當然也可以用來實現golang的守護進程,下面描述下具體實現。

安裝supervisor

基於centos 6.4。

supervisor使用python編寫的,可以用easy_install安裝。centos上預設有python的運行環境,安裝起來就非常簡單了。

$ sudo yum install python-setuptools$ sudo easy_install supervisor

如果沒有看到什麼報錯,那麼就安裝成功了,可以使用echo_supervisord_conf查看配置詳情,而後組建組態檔案。

$ sudo echo_supervisord_conf > /etc/supervisord.conf

golang http服務

先整一個簡單的golang http服務

package mainimport ("fmt""log""net/http")func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Hello world")})err := http.ListenAndServe(":9090", nil)if err != nil {log.Fatal("ListenAndServe: ", err)}}

直接運行這個程式會佔用住終端,下面看看如何用supervisor來跑這個程式。

supervisor配置golang

編輯/etc/supervisord.conf,在最後增加運行程式設定

[program:golang-http-server]command=/home/golang/simple_http_serverautostart=trueautorestart=truestartsecs=10stdout_logfile=/var/log/simple_http_server.logstdout_logfile_maxbytes=1MBstdout_logfile_backups=10stdout_capture_maxbytes=1MBstderr_logfile=/var/log/simple_http_server.logstderr_logfile_maxbytes=1MBstderr_logfile_backups=10stderr_capture_maxbytes=1MB

幾個配置說明:

command:表示啟動並執行命令,填入完整的路徑即可。
autostart:表示是否跟隨supervisor一起啟動。
autorestart:如果該程式掛了,是否重新啟動。
stdout_logfile:終端標準輸出重新導向檔案。
stderr_logfile:終端錯誤輸出重新導向檔案。

其餘配置說明可以查看官方文檔。

啟動supervisor

$ sudo /usr/bin/supervisord -c /etc/supervisord.conf

如果出現什麼問題,可以查看日誌進行分析,記錄檔路徑/tmp/supervisord.log

tips:如果修改了設定檔,可以用kill -HUP重新載入設定檔

$ cat /tmp/supervisord.pid | xargs sudo kill -HUP

查看supervisor運行狀態

$ supervisorctlgolang-http-server RUNNING pid 23307, uptime 0:02:55supervisor>

輸入help可以查看協助

supervisor> helpdefault commands (type help ):=====================================add clear fg open quit remove restart start stop updateavail exit maintail pid reload reread shutdown status tail version

supervisor運行原理

supervisor運行後本身是守護進程,通過自身來管理相應的子進程,通過觀察相應的進程狀態就很明了了。

$ ps -ef | grep supervisordroot 23306 1 0 07:30 ? 00:00:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.confroot 23331 23222 0 07:41 pts/0 00:00:00 grep supervisord$ ps -ef | grep simple_http_serverroot 23307 23306 0 07:30 ? 00:00:00 /home/golang/simple_http_serverroot 23333 23222 0 07:41 pts/0 00:00:00 grep simple_http_server

可以很直觀的看出golang simple_http_server進程是supervisord的子進程。

supervisor是否靠譜

supervisor的誕生已經10年了,現在是3+版本,所以放心使用吧。

參考

supervisor官網:http://supervisord.org/

關於守護進程以前在玩python的時候有寫過其中實現的原理,詳細可以參考:linux下python守護進程編寫和原理理解

轉載請註明:快樂編程 » supervisor運行golang守護進程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.