最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用systemd部署golang項(xiàng)目的實(shí)現(xiàn)方法

 更新時(shí)間:2019年11月24日 14:38:45   作者:qinhan  
這篇文章主要介紹了利用systemd部署golang項(xiàng)目的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

 簡(jiǎn)介

- CentOS 7 繼承了 RHEL 7 的新的特性,例如強(qiáng)大的 systemd, 而 systemd 的使用也使得以往系統(tǒng)服務(wù)的 /etc/init.d 的啟動(dòng)腳本的方式就此改變, 也大幅提高了系統(tǒng)服務(wù)的運(yùn)行效率。但服務(wù)的配置和以往也發(fā)生了極大的不同,同時(shí)變的簡(jiǎn)單而易用了許多。

- CentOS 7 的服務(wù) systemctl 腳本存放在:/usr/lib/systemd/,有系統(tǒng) system 和用戶 user 之分, 即:/usr/lib/systemd/system 和 /usr/lib/systemd/user

 配置文件

- 這里我們先要說明一下 unit 的文件位置,一般主要有三個(gè)目錄:

/lib/systemd/system
/run/systemd/system
/etc/systemd/system

- 這三個(gè)目錄的配置文件優(yōu)先級(jí)依次從低到高,如果同一選項(xiàng)三個(gè)地方都配置了,優(yōu)先級(jí)高的會(huì)覆蓋優(yōu)先級(jí)低的。 系統(tǒng)安裝時(shí),默認(rèn)會(huì)將 unit 文件放在 /lib/systemd/system 目錄。如果我們想要修改系統(tǒng)默認(rèn)的配置,比如 nginx.service,一般有兩種方法:

- 在 /etc/systemd/system 目錄下創(chuàng)建 nginx.service 文件,里面寫上我們自己的配置。

- 在 /etc/systemd/system 下面創(chuàng)建 nginx.service.d 目錄,在這個(gè)目錄里面新建任何以.conf 結(jié)尾的文件,然后寫入我們自己的配置。推薦這種做法。

- /run/systemd/system 這個(gè)目錄一般是進(jìn)程在運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建 unit 文件的目錄,一般很少修改,除非是修改程序運(yùn)行時(shí)的一些參數(shù)時(shí),即 Session 級(jí)別的,才在這里做修改。

 服務(wù)配置

- 每一個(gè)服務(wù)以.service 結(jié)尾,一般會(huì)分為 3 部分:[Unit]、[Service] 和 [Install],就以 nginx 為例吧,具體內(nèi)容如下:

[Unit]

Description=nginx - high performance web server

Documentation=http://nginx.org/en/docs/

After=network.target remote-fs.target nss-lookup.target

[Service]

Type=forking

PIDFile=/usr/local/nginx/logs/nginx.pid

ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

ExecReload=/bin/kill -s HUP $MAINPID

ExecStop=/bin/kill -s QUIT $MAINPID

PrivateTmp=true

[Install]

WantedBy=multi-user.target

 配置項(xiàng)說明

- 下面分別解釋下著三部分的含義

 [Unit]

- Description : 服務(wù)的簡(jiǎn)單描述

- Documentation : 服務(wù)文檔

- After= : 依賴,僅當(dāng)依賴的服務(wù)啟動(dòng)之后再啟動(dòng)自定義的服務(wù)單元

 [Service]

- Type : 啟動(dòng)類型 simple、forking、oneshot、notify、dbus

  • - Type=simple(默認(rèn)值):systemd 認(rèn)為該服務(wù)將立即啟動(dòng),服務(wù)進(jìn)程不會(huì) fork。如果該服務(wù)要啟動(dòng)其他服務(wù),不要使用此類型啟動(dòng),除非該服務(wù)是 socket 激活型
  • - Type=forking:systemd 認(rèn)為當(dāng)該服務(wù)進(jìn)程 fork,且父進(jìn)程退出后服務(wù)啟動(dòng)成功。對(duì)于常規(guī)的守護(hù)進(jìn)程(daemon),除非你確定此啟動(dòng)方式無法滿足需求, 使用此類型啟動(dòng)即可。使用此啟動(dòng)類型應(yīng)同時(shí)指定 PIDFile=,以便 systemd 能夠跟蹤服務(wù)的主進(jìn)程。
  • - Type=oneshot:這一選項(xiàng)適用于只執(zhí)行一項(xiàng)任務(wù)、隨后立即退出的服務(wù)??赡苄枰瑫r(shí)設(shè)置 RemainAfterExit=yes 使得 systemd 在服務(wù)進(jìn)程退出之后仍然認(rèn)為服務(wù)處于激活狀態(tài)。
  • - Type=notify:與 Type=simple 相同,但約定服務(wù)會(huì)在就緒后向 systemd 發(fā)送一個(gè)信號(hào),這一通知的實(shí)現(xiàn)由 libsystemd-daemon.so 提供
  • - Type=dbus:若以此方式啟動(dòng),當(dāng)指定的 BusName 出現(xiàn)在 DBus 系統(tǒng)總線上時(shí),systemd 認(rèn)為服務(wù)就緒。

- PIDFile : pid 文件路徑

- Environment : 環(huán)境變量(可以添加多個(gè))eg :Environment=REPO_REF=dev

- ExecStartPre :?jiǎn)?dòng)前要做什么,上文中是測(cè)試配置文件 -t

- ExecStart:?jiǎn)?dòng)

- ExecReload:重載

- ExecStop:停止

- PrivateTmp:True 表示給服務(wù)分配獨(dú)立的臨時(shí)空間

 [Install]

- WantedBy:服務(wù)安裝的用戶模式,從字面上看,就是想要使用這個(gè)服務(wù)的有是誰?上文中使用的是:multi-user.target ,就是指想要使用這個(gè)服務(wù)的目錄是多用戶。

 操作示例

- 每一個(gè).target 實(shí)際上是鏈接到我們單位文件的集合,當(dāng)我們執(zhí)行

systemctl enable nginx.service

- 就會(huì)在 /etc/systemd/system/multi-user.target.wants/ 目錄下新建一個(gè) /usr/lib/systemd/system/nginx.service 文件的鏈接。

 常用的 service 操作

# 自啟動(dòng)
systemctl enable nginx.service

# 禁止自啟動(dòng)
systemctl disable nginx.service

# 啟動(dòng)服務(wù)
systemctl start nginx.service

# 停止服務(wù)
systemctl stop nginx.service

# 重啟服務(wù)
systemctl restart nginx.service

# 查看Unit定義文件
systemctl cat nginx.service

# 編輯Unit定義文件
systemctl edit nginx.service

# 重新加載Unit定義文件
systemctl reload nginx.service

# 列出已啟動(dòng)的所有unit,就是已經(jīng)被加載到內(nèi)存中
systemctl list-units

# 列出系統(tǒng)已經(jīng)安裝的所有unit,包括那些沒有被加載到內(nèi)存中的unit
systemctl list-unit-files

# 查看服務(wù)的日志
journalctl -u nginx.service # 還可以配合`-b`一起使用,只查看自本次系統(tǒng)啟動(dòng)以來的日志

# 查看所有target下的unit
systemctl list-unit-files --type=target

# 查看默認(rèn)target,即默認(rèn)的運(yùn)行級(jí)別。對(duì)應(yīng)于舊的`runlevel`命令
systemctl get-default

# 設(shè)置默認(rèn)的target
systemctl set-default multi-user.target

# 查看某一target下的unit
systemctl list-dependencies multi-user.target

# 切換target,不屬于新target的unit都會(huì)被停止
systemctl isolate multi-user.target
systemctl poweroff # 關(guān)機(jī)
systemctl reboot  # 重啟
systemctl rescue # 進(jìn)入rescue模式


 Systemd + Golang Demo

- 下面例子通過 Systemd 部署一個(gè)最簡(jiǎn)單的 Golang Web Server

package main

import (
 "flag"
 "fmt"
 "log"
 "net/http"
)

func main() {
 var address string
 flag.StringVar(&address, "address", "5353", "listen address")
 flag.Parse()

 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "Hello, This is a test for systemd !\n")
 }) // 設(shè)置訪問路由

 log.Printf("Starting server on %s\n", address)
 log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", address), nil))
}

- 編譯代碼,并將可執(zhí)行文件同步到遠(yuǎn)程服務(wù)器上

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o systemd-test main.go
rsync -zP ./systemd-test root@gp-aliyun:/usr/local/bin/

- 在遠(yuǎn)程服務(wù)器上編寫服務(wù)配置,放在 /etc/systemd/system/ 中

[Unit]
Description=Systemd Test
After=network.target

[Service]
User=nobody
# Execute `systemctl daemon-reload` after ExecStart= is changed.
ExecStart=/usr/local/bin/systemd-test -address "6060"
[Install]
WantedBy=multi-user.target

- 通過 systemctl 啟動(dòng)服務(wù)

# 每一次修改ExecStart都需執(zhí)行
systemctl daemon-reload
# 啟動(dòng)
systemctl start systemd-test.service
# 查看狀態(tài)
systemctl status systemd-test.service

- 狀態(tài)如下

- 可以通過 curl 進(jìn)行測(cè)試:


以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Go并發(fā)原語之SingleFlight請(qǐng)求合并方法實(shí)例

    Go并發(fā)原語之SingleFlight請(qǐng)求合并方法實(shí)例

    本文我們來學(xué)習(xí)一下 Go 語言的擴(kuò)展并發(fā)原語:SingleFlight,SingleFlight 的作用是將并發(fā)請(qǐng)求合并成一個(gè)請(qǐng)求,以減少重復(fù)的進(jìn)程來優(yōu)化 Go 代碼
    2023-12-12
  • golang實(shí)現(xiàn)協(xié)程池的方法示例

    golang實(shí)現(xiàn)協(xié)程池的方法示例

    本文主要介紹了golang實(shí)現(xiàn)協(xié)程池的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • Go?runtime?調(diào)度器之系統(tǒng)調(diào)用引起的搶占

    Go?runtime?調(diào)度器之系統(tǒng)調(diào)用引起的搶占

    本文解析了在Go語言中,當(dāng)goroutine執(zhí)行的系統(tǒng)調(diào)用時(shí)間過長(zhǎng)時(shí),系統(tǒng)如何通過監(jiān)控和搶占機(jī)制來處理,以維持運(yùn)行效率和資源分配的平衡,通過具體的示例和流程圖,詳細(xì)展示了系統(tǒng)調(diào)用過程中的搶占操作,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • Go高級(jí)特性探究之穩(wěn)定排序詳解

    Go高級(jí)特性探究之穩(wěn)定排序詳解

    Go 語言提供了 sort 包,其中最常用的一種是 sort.Slice() 函數(shù),本篇文章將為大家介紹如何使用 sort.SliceStable() 對(duì)結(jié)構(gòu)體數(shù)組的某個(gè)字段進(jìn)行穩(wěn)定排序,感興趣的可以了解一下
    2023-06-06
  • Golang基于文件魔數(shù)判斷文件類型的案例代碼

    Golang基于文件魔數(shù)判斷文件類型的案例代碼

    這篇文章主要介紹了Golang基于文件魔數(shù)判斷文件類型,本文介紹了基于文件魔數(shù)判斷文件類型的方法,主要涉及如何ReadSeek讀取文件指定字節(jié)內(nèi)容,然后介紹文件魔數(shù),最后給出示例基于魔數(shù)判斷文件類型,需要的朋友可以參考下
    2023-02-02
  • Go語言正則表達(dá)式的使用詳解

    Go語言正則表達(dá)式的使用詳解

    正則表達(dá)式是一種進(jìn)行模式匹配和文本操縱的功能強(qiáng)大的工具。這篇文章主要介紹了Go正則表達(dá)式使用,本文給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 淺談Golang數(shù)據(jù)競(jìng)態(tài)

    淺談Golang數(shù)據(jù)競(jìng)態(tài)

    本文主要介紹了淺談Golang數(shù)據(jù)競(jìng)態(tài),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 淺析go逆向符號(hào)恢復(fù)

    淺析go逆向符號(hào)恢復(fù)

    這篇文章主要介紹了go逆向符號(hào)恢復(fù)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Golang?Mutex互斥鎖源碼分析

    Golang?Mutex互斥鎖源碼分析

    本篇文章,我們將一起來探究下Golang?Mutex底層是如何實(shí)現(xiàn)的,知其然,更要知其所以然。文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-10-10
  • Go語言單例模式詳解

    Go語言單例模式詳解

    本文主要介紹了Go語言單例模式詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評(píng)論

方城县| 东丽区| 互助| 涟源市| 革吉县| 玉树县| 彰化县| 黔西| 吉木乃县| 肥东县| 莱州市| 株洲县| 乌拉特中旗| 蒙自县| 许昌县| 孝义市| 马龙县| 温州市| 民丰县| 平度市| 朝阳县| 吴旗县| 齐齐哈尔市| 鄂州市| 彩票| 奉节县| 柏乡县| 望谟县| 通城县| 石河子市| 广州市| 皋兰县| 嵊州市| 宁远县| 留坝县| 吉林省| 东兰县| 大厂| 闸北区| 林州市| 乐昌市|