.NET Core服務部署在Linux環境下的相關文檔可參考:
- 在 CentOS 上安裝 .NET SDK 或 .NET 運行時
- 在 ASP.NET Core 中使用託管服務實現後臺任務
- 自承載的 gRPC 應用程序
我們假定有一個服務clearlog用於清除服務器上的日誌,來看看服務如何搭建:
環境搭建
本服務部署在CentOS7.5上,需要.NET Core5.0運行時環境,可參照如下步驟執行:
步驟一 存儲庫
將Microsoft包簽名密鑰添加到受信任密鑰列表,並添加Microsoft包存儲庫,打開終端並運行以下命令:
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
若是報SSL connect error
錯誤,可以嘗試執行:
sudo yum -y update nss ca-certificates curl openssl
步驟二 安裝SDK
.NET SDK 使你可以通過 .NET 開發應用。 如果安裝 .NET SDK,則無需安裝相應的運行時。 若要安裝 .NET SDK,請運行以下命令:
sudo yum install dotnet-sdk-5.0
但實際上,無論測試環境還是生產環境都只需要安裝運行時環境即可,所以如果只安裝運行時環境:
sudo yum install dotnet-runtime-5.0
如果服務器上需要同時兼容asp.net core,則需要使用這個命令:
sudo yum install dotnet-runtime-5.0
其他版本的安裝
如果需要安裝其他版本,只需要將安裝目標改爲合適的名稱即可,格式命名爲:{product}-{type}-{version}
。
代碼調整
引入包
Linux需要在Nuget中額外引入依賴Microsoft.Extensions.Hosting.Systemd
,並在Program.cs
中添加UseSystemd()
代碼:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSystemd() //Linux 部署必須
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
關於服務相關拓展,請參考文檔:
服務器部署
發佈包
發佈方式有兩種:
- 一種是直接在Visual Studio右鍵單擊項目,選擇發佈,選擇Linux環境。
- 另一種時在.NET CLI中使用命令:
dotnet publish -c Release -r linux-x64 -p:PublishSingleFile=true -o E:\Pub
註冊服務
- 將發佈內容複製到Linux主機的安裝文件夾中
/usr/sbin/clearlog
下。 - 給
clearlog
執行權限。
chmod 755 clearlog
- 在
/etc/systemd/system
中創建文件clearlog.service
,修改文件:
[Unit]
Description= Clear log on the server.
[Service]
Type=notify
ExecStart=/usr/sbin/netcoreapp/clearlog
[Install]
WantedBy=multi-user.target
Type=notify
屬性指示systemd
應用程序在啓動和關閉時通知它,而WantedBy=multi-user.target
設置將導致在Linux運行達到級別
2時啓動服務,這意味着非圖形、多用戶shell處於活動狀態。
當我們將服務名爲“XXX”時,對應
systemd
中的服務名就爲“XXX.service”。
- 重新加載服務,並查看其狀態確認應用程序已註冊成功,執行命令:
sudo systemctl daemon-reload
sudo systemctl status clearlog.service
如果服務配置正確,則會看到以下輸出:
[root@localhost system]# systemctl status clearlog.service
● clearlog.service - Clear log linux service
Loaded: loaded (/etc/systemd/system/clearlog.service; disabled; vendor preset: disabled)
Active: inactive (dead)
- 啓用服務
sudo systemctl start clearlog.service
如需要系統啓動時自動啓動該服務,使用enable
命令。
sudo systemctl enable clearlog.service
事件日誌
服務本身記錄的日誌,可根據log4net的配置查看,不過有時任需要查看事件日誌,Linux中等效Windows日誌的是journald中包含的結構化日誌系統服務systemd
.
由 Linux 後臺程序寫入標準輸出的日誌消息將自動寫入到 journald
中,可通過如下命令查看日誌:
sudo journalctl -u clearlog.service
關於journalctl
更多請查看:JOURNALCTL命令。