Linux如何自定義systemd服務?編寫.service文件教程

要在linux中用systemd創建開機自啟服務,首先需在/etc/systemd/system/目錄下創建.service文件,如myapp.service,并配置[unit]、[service]、[install]三部分;1. [unit]段設置description和after;2. [service]段指定execstart、restart策略、user及workingdirectory;3. [install]段設wantedby=multi-user.target。接著執行sudo systemctl daemon-reload加載配置,再用enable命令開機啟動服務,start啟動服務,status查看狀態。調試時用journalctl -u myapp.service -f查看日志,注意execstart路徑必須為絕對路徑,必要時顯式激活虛擬環境或添加environment變量,排查權限與用戶問題確保服務穩定運行。

Linux如何自定義systemd服務?編寫.service文件教程

linux系統中,如果你希望某個程序或腳本能夠像服務一樣自動運行、開機啟動、崩潰后自動重啟,用systemd自定義一個.service文件是最直接的方式。下面是一份簡單實用的教程,帶你一步步寫出自己的systemd服務配置。

Linux如何自定義systemd服務?編寫.service文件教程


1. 創建.service文件的基本結構

systemd服務的配置文件通常放在 /etc/systemd/system/ 目錄下,文件名以 .service 結尾。比如你想創建一個叫 myapp.service 的服務,可以這樣操作:

Linux如何自定義systemd服務?編寫.service文件教程

sudo nano /etc/systemd/system/myapp.service

然后寫入以下基本內容作為模板:

[Unit] Description=My Custom Application Service After=network.target  [Service] ExecStart=/usr/bin/python3 /path/to/your_script.py Restart=always User=your_username WorkingDirectory=/path/to/your_script_directory  [Install] WantedBy=multi-user.target
  • Description:服務的描述信息,隨便寫點有意義的就行。
  • After:指定該服務在網絡就緒之后再啟動。
  • ExecStart:你要運行的命令,必須是完整路徑。
  • Restart:設置服務異常退出時是否重啟,常用 always 或 on-failure。
  • User:以哪個用戶身份運行這個服務。
  • WorkingDirectory:執行命令時的工作目錄。
  • WantedBy:表示服務應該在什么目標下啟用,一般用 multi-user.target 就行。

2. 設置權限并啟用服務

保存完.service文件后,需要通知systemd重新加載配置,然后啟用并啟動服務:

Linux如何自定義systemd服務?編寫.service文件教程

  • 重新加載 systemd 配置:
sudo systemctl daemon-reload
  • 啟用服務(開機自啟):
sudo systemctl enable myapp.service
  • 啟動服務:
sudo systemctl start myapp.service
  • 查看服務狀態:
sudo systemctl status myapp.service

如果看到 active (running),說明服務已經正常運行了。


3. 常見問題和調試技巧

日志查看方法:

使用 journalctl 可以查看服務的日志輸出:

journalctl -u myapp.service -f
  • -u 指定服務名
  • -f 表示實時跟蹤日志輸出

注意事項:

  • ExecStart 路徑要寫絕對路徑,不能用相對路徑或環境變量

  • 如果你的腳本依賴虛擬環境,可以在 ExecStart 中顯式激活,例如:

    ExecStart=/bin/bash -c '/path/to/venv/bin/python /path/to/script.py'
  • 如果服務啟動失敗,先檢查權限問題,尤其是腳本是否有可執行權限、用戶是否存在等

  • 可以加上 Environment 設置環境變量,例如:

    Environment="API_KEY=your_key_here"

基本上就這些。寫一個簡單的 .service 文件并不難,但有些細節容易忽略,比如路徑、用戶權限和日志排查方式。只要把這幾個關鍵點搞清楚,就能穩定地讓自己的程序跑成系統服務了。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享