iT邦幫忙

2022 iThome 鐵人賽

DAY 27
0
Software Development

讓 C# 也可以很 Social - 在 .NET 6 用 C# 串接 LINE Services API 的取經之路系列 第 27

[Day 27] .NET 6 C# 與 Line Services API 開發 - 在 Centos 設定 Kestrel 服務 (systemd)

  • 分享至 

  • xImage
  •  
tags: .NET6 C#, LineBot, Line Messaging API, C#, dotnet core

[Day 27] 讓 C# 也可以很 Social - .NET 6 C# 與 Line Services API 開發 - 在 Centos 設定 Kestrel 服務(systemd)

前言 -

在上一篇我們成功在 server 上執行 .net core 專案後,接著這一篇我們要透過系統的服務管理工具(systemd)來啟動 kestrel 。唯有這樣子才能讓系統在無人看管的狀態下,重開機之後還能自動執行相關的指令。 (*應該...不會有人想要時時刻刻陪著主機...吧)

一開始先簡單介紹一下什麼是 systemd,systemd 是 Linux 現在常用的內建服務管理工具,透過它可以有效的管理伺服器上的各個服務,只要寫好相對應文件,就可以透過簡易的指令來控制服務 (> systemctl start 專案名稱.service ),不管是 .net 或是 java 寫出來的程式都可以包裝成系統的背景服務喔 ~
接著我們就開始來設定囉!

systemd 常用指令

開始之前我們先了解一下 systemd 的常用的指令,以及文件放置位置

  • 文件放置資料夾
    1. /etc/systemd/system/ => 系統預設的放置路徑
  • 常用指令
    1. systemctl list-unit-files --type=service => 列出所有服務清單
    2. systemctl list-unit-files --type=service | grep nginx => 列出所有服務名稱包含nginx的清單
    3. systemctl status 服務名稱.service => 檢查個別服務狀態
    4. systemctl status 服務名稱.service -l => 檢查個別服務狀態,並列出 log
    5. systemctl start 服務名稱.service => 啟動服務
    6. systemctl restart 服務名稱.service => 重新啟動服務
    7. systemctl stop 服務名稱.service => 停止服務服務
    8. systemctl daemon-reload => 通常只要有編輯過服務文件,都會需要執行這個指令更新服務

systemd 配置文件指令說明

systemd 配置文件主要會分為三個區塊 [Unit][Service][Install],三個區塊裡面分別可以透過指令做不同的設定,接著我們就針對常見的指令說明一下用途。

  • [Unit]區塊指令
    1. Description=Line Poc : 服務的描述
    2. After=nginx.service : 服務需在 nginx.service 後啟動
    3. Before=mysql.service : 服務需在 mysql.service 前啟動
    4. Wants=mysql.service : 服務與 mysql.service 沒有強制依賴的關係,不受 mysql.service 異常影響
    5. Requires=nginx.service : 服務與 nginx.service 有強制依賴的關係,受 nginx.service 異常影響
  • [Service]區塊指令
    1. Environment : 環境變數設定
    2. WorkingDirectory : 服務執行的專案目錄
    3. ExecStart : 服務啟動專案的指令,在這邊就會是我們透過 terminal 啟動專案時的指令
    4. Restart : 發生異常重新啟動專案機制
      • no (預設值 不重新啟動)
      • always (除了透過 systemctl stop 停止服務外,其餘方式皆重啟)
      • on-failure (發生錯誤時才重啟服務)
    5. RestartSec : 重新啟動服務的間隔時間
  • [Install]區塊指令
    1. WantedBy : 服務所在 target 設定,設定為 multi-user.target,服務會在開機時自動啟動

配置 kestrel systemd 文件

了解基本的 systemd 文件指令的應用後,我們就可以開始來寫我們的 kestrel 配置文件,大家可以參考下方程式碼

[Unit]
Description=LinePoc
[Service]
Environment=ASPNETCORE_ENVIRONMENT=Staging
WorkingDirectory=/home/admin/LinePoc
ExecStart=/usr/bin/dotnet /home/admin/LinePoc/LinePoc.dll --urls http://0.0.0.0:5001
Restart=always
RestartSec=10
SyslogIdentifier=LinePoc
User=root
[Install]
WantedBy=multi-user.target

Step 1 : 我們將上方指令放到 /etc/systemd/system/ 目錄下
https://ithelp.ithome.com.tw/upload/images/20221004/20151616LdsUpz79Jw.png

Step 2 : 透過指令來更新狀態
> sudo systemctl daemon-reload

Step 3 : 透過指令來啟動服務
> sudo systemctl start LinePoc.service

Step 4 : 最後我們可以透過 下面的指令來確認服務是否成功啟動~
> sudo systemctl status LinePoc.service

https://ithelp.ithome.com.tw/upload/images/20221004/20151616nzEPu2Grer.png

如果各位都有看到如上圖的執行結果,代表我們已經完成 systemd 的配置囉。透過 systemd 除了可以統一管理服務外,我們啟動服務需設定的一些參數指令也都可以直接寫在配置文件中,也可以讓我們可以更好的維護 server 上的專案~

在完成 .net 6 api 專案 server 安裝及設定後,接著我們也必須將前端頁面安裝到 server 上,這邊我們會使用的是 nginx (web)的服務,下一篇會接著介紹 nginx 的安裝與前端網頁的部署 ~ 咱們下篇見 !


上一篇
[Day 26] .NET 6 C# 與 Line Services API 開發 - 在 Centos 部署 .Net Core API (Kestrel)
下一篇
[Day 28] .NET 6 C# 與 Line Services API 開發 - 在 Centos 架設 web Server (nginx)
系列文
讓 C# 也可以很 Social - 在 .NET 6 用 C# 串接 LINE Services API 的取經之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言