如何編寫一個生產級 Systemd 服務配置文件?

2026年03月03日22:32:09 科技 1144

如何編寫一個生產級 Systemd 服務配置文件? - 天天要聞

在大多數 Linux 發行版中,systemd 已成為默認的初始化系統和服務管理器,負責啟動、監控和管理系統服務。如果將自己寫的應用程序通過systemd進行管理,這就需要編寫相應的服務配置文件。接下來,將講解如何編寫一個生產級的服務配置文件。

步驟1:基本了解 Service 配置文件的結構

systemd 服務配置文件通常位於 /etc/systemd/system/ 目錄下,並且以 .service 結尾。一個 systemd 服務文件包含多個部分,每個部分以方括弧 [Section] 開頭,並包含具體的配置項。

常見部分:

  • [Unit]:定義服務的基本信息和元數據。
  • [Service]:定義服務的執行方式、環境等。
  • [Install]:定義如何將服務安裝到系統中。

步驟2:編寫 Service 配置文件

我們將以一個典型的 Web 服務為例,假設你有一個名為 myapp 的 Web 應用,已經準備好一個啟動腳本,位於 /opt/myapp/start.sh。

[Unit]
Description=MyApp Web Service
After=network.target


[Service]
ExecStart=/bin/bash /opt/myapp/start.sh
ExecStop=/bin/bash /opt/myapp/stop.sh
WorkingDirectory=/opt/myapp
Restart=always
User=myuser
Group=mygroup
Environment=ENV_VAR=value
LimitNOFILE=65536
TimeoutStartSec=30
TimeoutStopSec=20
StandardOutput=journal
StandardError=journal
SyslogIdentifier=myapp


[Install]
WantedBy=multi-user.target

[Unit] 部分

  • Description:簡要描述該服務的功能,通常是服務的名字和作用。
  • After:定義服務的啟動順序。network.target 表示服務應該在網路服務啟動後啟動。

[Service] 部分

  • ExecStart:定義啟動服務的命令。在這裡,我們使用 /bin/bash 來執行啟動腳本 /opt/myapp/start.sh。
  • ExecStop:定義停止服務時需要執行的命令。你可以指定一個停止腳本或命令來關閉服務。
  • WorkingDirectory:指定服務的工作目錄。這個目錄是服務啟動時的當前工作目錄。
  • Restart:定義服務崩潰後的重啟策略。always 表示如果服務崩潰或停止,systemd 將會自動重新啟動它。
  • UserGroup:指定運行該服務的用戶和用戶組。運行服務時以指定的用戶身份執行,確保服務的許可權控制。
  • Environment:設置環境變數供服務使用。在此示例中,ENV_VAR=value 是一個示例環境變數,實際使用時根據需求配置。
  • LimitNOFILE:限制服務可以打開的最大文件描述符數。對於高並發的服務,這個值可能需要增加。
  • TimeoutStartSecTimeoutStopSec:指定啟動和停止服務時的超時設置。這裡分別設置了啟動超時為 30 秒,停止超時為 20 秒。
  • StandardOutputStandardError:定義服務的標準輸出和標準錯誤輸出的位置。journal 表示將輸出發送到 systemd 的日誌管理系統中(journalctl 查看)。
  • SyslogIdentifier:服務的日誌標識符,方便在 syslog 或 journalctl 中區分不同服務的日誌。

[Install] 部分

  • WantedBy:定義服務的目標。multi-user.target 表示服務將在系統進入多用戶模式時啟動。你可以選擇不同的目標,控制服務在系統不同階段的啟動。

步驟3:將服務文件放入正確的目錄

將上述服務配置文件保存到 /etc/systemd/system/ 目錄下,文件名為 myapp.service(可以根據實際需求修改文件名)。

vi /etc/systemd/system/myapp.service

步驟4:重新載入 systemd 配置

每次修改或添加新的服務配置文件時,需要重新載入 systemd 配置,確保新服務文件生效。

systemctl daemon-reload

步驟5:啟動服務並設置開機自啟

啟動服務systemctl start myapp
查看服務狀態systemctl status myapp
設置開機自啟systemctl enable myapp
步驟6:管理服務

停止服務

systemctl stop myapp

重新啟動服務

systemctl restart myapp

查看服務日誌

journalctl -u myapp

總結

  • systemd 服務配置文件具有多個部分(如 [Unit]、[Service]、[Install]),每個部分負責不同的配置任務。
  • 一個生產級的服務配置文件需要考慮到服務的啟動順序、用戶許可權、重啟策略、資源限制、日誌輸出等。
  • 配置完成後,使用 systemctl 命令啟動、管理服務並設置開機自啟。

科技分類資訊推薦

引領科技豪華MPV新風尚 第二代騰勢D9西安車展亮相 - 天天要聞

引領科技豪華MPV新風尚 第二代騰勢D9西安車展亮相

兼具宜商氣度與家用溫情的科技豪華旗艦MPV,第二代騰勢D9迎來西安地區正式亮相。新車依託全球新能源MPV冠軍底蘊,以第二代刀片電池、雙閥雲輦-C、天神之眼5.0智駕等核心技術全面升級,兼顧商務體面與家庭舒適,為西北高端用戶帶來一站式全能出行解決方案。
採購禁入!科華數據材料造假被拒門外 - 天天要聞

採購禁入!科華數據材料造假被拒門外

本報(chinatimes.net.cn)記者胡雅文 北京報道這家趕上AI算力風口的公司,因投標材料造假,被相關採購方列入禁入名單兩年,其此前提出的複議申請也被正式駁回。相關採購平台近日發布公告,明確駁回科華數據股份有限公司(下稱「科華數據」,002335.SZ)此前提交的複議申請。早在一年前,科華數據已被認定在「信息通信樞紐...
快評樂道L80:15萬元級買大五座,這波值得沖? - 天天要聞

快評樂道L80:15萬元級買大五座,這波值得沖?

日前,樂道L80正式發布並開啟預售,其整車購買預售價為24.58萬元起,租電購買預售價則低至15.98萬元起。面對大型SUV市場「細分再細分」之競爭趨勢,這款樂道年度重磅新車都有哪些優勢?又能否成為「大五座SUV革新之作」?下面,圈哥就帶大家全方位感受。
成都直擊凱威德:純電全尺寸SUV的張揚與大氣 - 天天要聞

成都直擊凱威德:純電全尺寸SUV的張揚與大氣

4月22日,凱迪拉克以奧斯卡級盛典規格,將上海保利大劇院點亮為璀璨舞台,在品牌代言人倪妮與全場嘉賓的共同見證下,凱迪拉克全尺寸純電公路旗艦——凱威德耀然上市。新車共推出長續航四驅Pro、高性能四驅Ultra兩款配置,官方售價區間為46.88萬-50.88萬元。