天天看點

supervisor用為golang背景建立守護程序

supervisor是一個unix的系統程序管理軟體,可以用它來管理apache、nginx等服務,若服務挂了可以讓它們自動重新開機。下面基于centos 6.6,描述下具體實作:

1

2

<code>sudo</code> <code>yum </code><code>install</code> <code>python-setuptools</code>

<code>sudo</code> <code>easy_install supervisor</code>

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

<code>sudo</code> <code>echo_supervisord_conf &gt; </code><code>/etc/supervisord</code><code>.conf</code>

假設如下一段簡單的golang代碼:

<code>package</code> <code>main</code>

<code>import</code> <code>(</code>

<code>    </code><code>"fmt"</code>

<code>    </code><code>"log"</code>

<code>    </code><code>"net/http"</code>

<code>)</code>

<code>func</code> <code>main() {</code>

<code>    </code><code>http.HandleFunc(</code><code>"/"</code><code>, </code><code>func</code><code>(w http.ResponseWriter, r *http.Request) {</code>

<code>        </code><code>fmt.Fprintf(w, </code><code>"Hello world"</code><code>)</code>

<code>    </code><code>})</code>

<code>    </code><code>err := http.ListenAndServe(</code><code>":9090"</code><code>, nil)</code>

<code>    </code><code>if</code> <code>err != nil {</code>

<code>        </code><code>log.Fatal(</code><code>"ListenAndServe: "</code><code>, err)</code>

<code>    </code><code>}</code>

<code>}</code>

go build編譯,在/usr/local/ponpon/gowork/src/test/生成可執行檔案test。

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

3

4

5

6

7

8

9

10

11

12

13

14

<code>[program:go-http-server]</code>

<code>command</code><code>=</code><code>/usr/local/ponpon/gowork/src/test/test</code>

<code>directory=</code><code>/usr/local/ponpon/gowork/src/test</code>

<code>autostart=</code><code>true</code>

<code>autorestart=</code><code>true</code>

<code>startsecs=10</code>

<code>stdout_logfile=</code><code>/var/log/stdout</code><code>.log</code>

<code>stdout_logfile_maxbytes=1MB</code>

<code>stdout_logfile_backups=10</code>

<code>stdout_capture_maxbytes=1MB</code>

<code>stderr_logfile=</code><code>/var/log/stderr</code><code>.log</code>

<code>stderr_logfile_maxbytes=1MB</code>

<code>stderr_logfile_backups=10</code>

<code>stderr_capture_maxbytes=1MB</code>

幾個配置說明:

command:表示運作的指令,填入完整的路徑即可。 directory:表示cd到應用的目錄下 autostart:表示是否跟随supervisor一起啟動。 autorestart:如果該程式挂了,是否重新啟動。 stdout_logfile:終端标準輸出重定向檔案。 stderr_logfile:終端錯誤輸出重定向檔案。

最後啟動supervisor

<code>sudo</code> <code>/usr/bin/supervisord</code> <code>-c </code><code>/etc/supervisord</code><code>.conf</code>

如果提示/tmp/supervisord.sock 報錯,删除/tmp/supervisord.sock重新啟動supervisor即可

本文轉自 ponpon_ 51CTO部落格,原文連結:http://blog.51cto.com/liuxp0827/1643620,如需轉載請自行聯系原作者