2012-04-08 138 views
34

在Ubuntu中作爲守護進程啓動Go程序的正確方法是什麼?然後我會用Monit監控它。我是否應該這樣做:如何在Ubuntu中作爲守護進程啓動Go程序?

go run myapp.go & 

是否有特定的東西,我應該考慮到?

+0

如果沒有迫切需要重新編譯您的應用程序,那麼您應該每構建一次應用程序並像其他編譯語言一樣運行應用程序。請看住持的答案 – Bort 2012-04-09 09:28:41

回答

33

你應該建立一個可執行的程序(go build),然後或者編寫腳本,針對upstart,它會運行您的程序作爲守護你,或使用外部工具,像daemonize。我更喜歡後一種解決方案,因爲它不依賴於依賴系統的新貴。隨着守護進程你就可以開始你的應用程序一樣

daemonize -p /var/run/myapp.pid -l /var/lock/subsys/myapp -u nobody /path/to/myapp.exe 

這會給你與守護進程做一切必要的準備守護良好的表現UNIX守護進程。

+3

這就是我們在工作中所做的。 Goroutines在進程中使守護進程複雜化。在RHEL上,我們使用標準的Sys V啓動/停止/重新啓動腳本。在其他地方,你想使用目標操作系統使用的任何東西......暴發戶等。在Windows上,我們有一個用C#編寫的小型Windows服務,它在那裏執行相同的操作。 – Nate 2012-04-09 04:52:06

+1

謝謝。你介意分享你的C#代碼,Nate嗎? – Atmocreations 2016-02-07 12:41:27

+0

另外還有一個專門爲Go程序構建的https://github.com/fiorix/go-daemon。 – fiorix 2016-04-15 14:13:39

6

有關於從Go程序中,以守護進程的能力的錯誤報告:http://code.google.com/p/go/issues/detail?id=227要麼執行下列操作之一

但如果你以後有什麼是剛剛從進程分離我見過的建議:

nohup go run myapp.go 

go run myapp.go & disown 

您還可以使用進程管理器,就像寫一個init.dStartup,或使用類似Supervisor,我個人非常喜歡。