systemd 服務單元檔案教學
systemd 是 Linux 系統中用於管理系統和服務的一個核心工具。在 Red Hat Linux 系統上,使用 systemd 服務單元檔案可以高效地配置和管理 .NET 服務。本文將逐步介紹如何建立和配置 systemd 服務。
設定檔案範例 demo.service
[Unit]
Description= Demo Service
[Service]
Type=simple
WorkingDirectory=/path/to/working/directory
ExecStart=/bin/dotnet /path/to/executable
Restart=always
# 若 dotnet 服務崩潰後,10秒後重啟服務:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-worker
User=userId
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
Environment=EXAMPLE_VAR=example_value
[Install]
WantedBy=multi-user.target
當然可以。以下是 systemd 服務單元檔案(Unit file)的完整說明,包括 [Unit]
,[Service]
和 [Install]
部分的詳細介紹:
systemd 服務單元檔案結構
1. [Unit] 部分
這部分提供了服務的基本資訊和描述。
Description
: 簡要描述服務的功能或目的。After
/Before
: 定義服務啟動的順序相對於其他單元。Requires
/Wants
: 列出啟動此服務前需要啟動的其他單元。BindsTo
: 類似於Requires
,但更強烈地表達依賴關係。如果被綁定的單元消失,該服務也會停止。
2. [Service] 部分
定義了服務如何運行和管理。
Type
: 指定服務的啟動類型(例如simple
,forking
,oneshot
,notify
,dbus
)。Type=simple
: 表示主服務二進制文件執行後,服務立即啟動。WorkingDirectory
: 指定服務的工作目錄。例如:WorkingDirectory=/path/to/working/directory
。ExecStart
: 定義啟動服務的命令。例如:ExecStart=/bin/dotnet /path/to/executable
。ExecStop
: 定義停止服務時執行的命令。Restart=always
: 無論退出狀態如何,都會重新啟動服務。指定在什麼情況下應重新啟動服務(例如always
,on-failure
,never
)RestartSec=10
: 服務崩潰後重啟前的等待時間(秒)。KillSignal=SIGINT
: 用於停止服務的信號。SyslogIdentifier
: 在系統日誌中的服務標識符。User
/Group
: 指定以哪個用戶或群組身份運行服務。Environment
: 設置服務的環境變數。
3. [Install] 部分
控制服務的安裝和啟用行為。
WantedBy
: 定義在啟用服務時應該將服務添加到哪個 target 的「wants」目錄中。常見的設定是multi-user.target
。
4. 設定每三小時自動重啟
為了每三小時自動重啟服務,需建立 .timer
單元檔案。下列範例為demo.timer
[Unit]
Description=每三小時重啟 Demo Service
[Timer]
OnBootSec=3h
OnUnitActiveSec=3h
Unit=demo.service
[Install]
WantedBy=timers.target
OnBootSec
和OnUnitActiveSec
設為3h
,表示計時器將在系統啟動後及單位最後一次啟用後三小時啟動。
5. 啟用和啟動服務
建立服務單元檔案和計時器檔案後,使用以下命令來啟用和啟動:
sudo systemctl enable demo.service
sudo systemctl start demo.service
sudo systemctl enable demo.timer
sudo systemctl start demo.timer
使用指南
- 建立這樣的檔案後,通常將其保存於
/etc/systemd/system/
目錄下。 - 使用
systemctl
命令來啟用和管理這個服務:例如systemctl start myservice.service
啟動服務,systemctl enable myservice.service
使服務在啟動時自動運行。
這樣的服務單元檔案是 systemd 使用的標準方式,用於在 Linux 系統中配置和管理服務。透過 systemd,你可以在 Red Hat Linux 系統上靈活地管理 .NET 服務。本指南提供了配置服務所需的所有步驟,幫助你輕鬆實現高效的服務管理。