在 Linux 新增一個 Service

Linux 2022-04-16 356

建立 Unit 檔案#

首先建立一個 system service unit 檔案,格式如下

[Unit]
Description=service discription

[Service]
Type=simple
ExecStart=execute path/command
Restart=always

[Install]
WantedBy=multi-user.target
  • ExecStart 為該執行的程式或是指令,如 php /path/to/main.php
  • 如果有需要先執行的指令,可以使用 ExecStartPre,如 ExecStartPre=mkdir /path/to/log/
  • 如果有需要執行的指令,可以使用 ExecStartPost,如 ExecStartPost=rm /path/to/some.txt

System Level#

若要以 root 的方式執行 service,則將 unit 檔存放於 /usr/lib/systemd/system/service-name.service(自行修改 service name)

User Level#

若要以特定的使用者執行 service,則將 unit 檔存放於 ~/.config/systemd/user/service-name.service(自行修改 service name)

  • 根據是誰的 home 目錄來決定是哪個使用者的 service

安裝 service#

安裝的意思為,為 service 設定權限,在何種開機模式下會自動執行,如上述範例為 multi-user,其餘各種開機模式可見此篇

  • 指令
systemctl install service-name.service
systemctl --user install service-name.service
  • 也可以先執行確認結果
systemctl start service-name.service
systemctl --user start service-name.service

--user 代表 user level,--system 是 system level,通常預設是 system level

確認 Log#

若是要確認 system service 的 log,則需要使用 journald 這個 service

journalctl -fu service-name
journalctl --user -fu service-name

修改 Unit 檔案

如果是在已經安裝完 service 後又有修改 unit 檔案時,在 restart service 需要先 reload daemon

systemctl daemon-reload
systemctl --user daemon-reload
systemctl restart service-name.service
systemctl --user restart service-name.service