隨著網路科技的日新月異,各種高效能的語言層出不窮。其中,Golang 以其高效的並發機制和簡潔的語法成為了越來越多開發者的首選語言。在實際生產環境中,我們經常需要將我們的 Golang 應用以守護程序的形式部署在伺服器上,以便實現自動啟動、錯誤重新啟動等功能。接下來,我們將介紹如何利用 systemd 將 Golang 應用以守護程式的形式部署。
簡單的說,守護程式就是在後台運行一直保持活動狀態的程式。它不依賴終端,並且不會隨著終端的關閉而終止。它可以自動在系統啟動時啟動,並在遇到錯誤時自動重新啟動。它在伺服器場景下非常常見, 例如 Web 伺服器、資料庫等都是以守護程序的形式運行,保證了系統可靠性和穩定性。
在 Linux 系統下有多種方式可以將應用程式以守護程式的形式運行,例如 nohup、screen 等。這些方法雖然簡單易用,但在可擴展性和管理性上只能達到比較基礎的要求。 systemd 是一個比較新的系統管理服務,它的目標是為了取代 SysV 和 Upstart 等服務。 systemd 以 啟動時間優化 做為最高指導原則,透過對大量不同 Linux 系統及相關服務的分析和測試,實現了啟動速度非常快、配置簡單易懂等一系列優秀特性。目前,systemd 已經被許多 Linux 發行版所採用。
假設我們的應用程式需要監聽HTTP 請求並回傳"hello world",先建立一個main.go 檔案:
package main import ( "fmt" "net/http" ) func HelloWorld(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World! ") } func main() { http.HandleFunc("/", HelloWorld) http.ListenAndServe(":8080", nil) }
執行下列指令即可啟動應用程式:
go run main.go
可以造訪http://localhost:8080 查看效果。
Systemd Unit 檔案是一個包含有關特定服務的效能、設定和啟動 / 停止資訊的設定檔。在使用systemd之前,需要建立一個守護程序啟動腳本的Unit文件,命名為myapp.service
,如下所示:
[Unit] Description=My App After=network.target [Service] User=root WorkingDirectory=/root/myapp ExecStart=/root/myapp/myapp Restart=always [Install] WantedBy=multi-user.target
各項參數的解釋如下:
Description
:服務的描述After
:當在執行run level 的時候,本unit 必需在順序列表的最後。 (本文的設定表示必須在網路服務啟動後才啟動本應用程式)User
:應用程式執行的使用者WorkingDirectory
:應用程式運行的工作目錄ExecStart
:應用程式執行的命令#Restart
:如果應用程式意外終止,則自動重新啟動應用程式WantedBy
:用來指定哪些target(啟動等級)或多個target(啟動等級)下將會啟用該service。 建立 Unit 檔案後,將其複製到 /etc/systemd/system/
目錄下。
接著,執行下列指令啟動守護程式:
systemctl daemon-reload # 重载 daemon systemctl start myapp.service # 启动服务 systemctl enable myapp.service # 将服务设为开机启动
至此,我們的 Golang 應用程式就已經以守護程式的形式部署在伺服器上了。可以透過以下命令查看服務狀態:
systemctl status myapp.service
本文介紹如何使用 systemd 將 Golang 應用以守護程序的形式部署在伺服器上。系統管理之道有很多種,以上僅為一種實現方式。希望對需要將 Golang 應用以守護程序的形式運行的讀者有所啟發,更多有關 Systemd 的詳細內容還需要大家自己去研究。
以上是golang 守護程式 部署的詳細內容。更多資訊請關注PHP中文網其他相關文章!